java模拟用户登录(实现自动签到)-aspx
2016-09-27 09:32
337 查看
刚来公司上班,发现需要自己每天都登录内部网进行签到,然后因为我健忘和怕麻烦,所以就有了它。
首先,我向你们推荐一款抓包软件,Fiddler Web Debugger,可以用来抓取浏览器与服务器之间传输的数据,方便模拟。看图,点击软件左边的链接可以看到与其相关的数据。
有了这些数据,我们就可以原样不动的发给服务器,达到了模拟的效果。
其中主要是一些网站的身份验证机制,我在这一方面还是一天经验的小白而已,有那句说那句。
在身份验证里面,有很多网站都是会将SessionId的值传到本地用Cookie保存起来的,而登录后,网站大多只通过Session来判断用户的有效性。
所以现在我们要做的就是,登录,从返回的Cookie信息中获取有效的SessionId值,然后在随后的访问中,携带上这个SessionId的值就可以一路绿灯了。
另外,就aspx的网页验证,其一般会在表单中添加__VIEWSTATE,__EVENTVALIDATION等字段值作为验证用户正常操作的一个条件。当然,这在Fiddler Web Debugger的眼皮底下是一目了然的。
原理很简单,下面给出关键的网络访问代码。
项目包下载地址:https://yunpan.cn/cBsDXLbaICHIC 访问密码 5a02
首先,我向你们推荐一款抓包软件,Fiddler Web Debugger,可以用来抓取浏览器与服务器之间传输的数据,方便模拟。看图,点击软件左边的链接可以看到与其相关的数据。
有了这些数据,我们就可以原样不动的发给服务器,达到了模拟的效果。
其中主要是一些网站的身份验证机制,我在这一方面还是一天经验的小白而已,有那句说那句。
在身份验证里面,有很多网站都是会将SessionId的值传到本地用Cookie保存起来的,而登录后,网站大多只通过Session来判断用户的有效性。
所以现在我们要做的就是,登录,从返回的Cookie信息中获取有效的SessionId值,然后在随后的访问中,携带上这个SessionId的值就可以一路绿灯了。
另外,就aspx的网页验证,其一般会在表单中添加__VIEWSTATE,__EVENTVALIDATION等字段值作为验证用户正常操作的一个条件。当然,这在Fiddler Web Debugger的眼皮底下是一目了然的。
原理很简单,下面给出关键的网络访问代码。
项目包下载地址:https://yunpan.cn/cBsDXLbaICHIC 访问密码 5a02
//sUrl是访问链接,param是post提交的参数。 public String mySendPost(String sUrl,String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL url = new URL(sUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection();//编写请求头 //将sessionId的值写入Cookie,ASPXAUTH为空,这里可以不要(按照具体的验证机制来写) conn.setRequestProperty("Cookie", sessionId+ASPXAUTH); conn.setRequestProperty("Host", "http://192.168.0.200"); conn.setRequestProperty("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36"); conn.setRequestProperty("Upgrade-Insecure-Requests", "1"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Accept-Encoding", "gzip, deflate"); conn.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8"); conn.setRequestProperty("Referer", lastUrl);//上一页面的链接(一些系统会对此进行判断) lastUrl = sUrl;//赋值该当前访问链接为上一页面的链接 conn.setRequestMethod("POST");// 提交模式 // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); //获取输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(),"UTF-8")); //读取返回结果 String line; while ((line = in.readLine()) != null) { result += line; } Map> map = conn.getHeaderFields(); //printCookie(map);//输出浏览器发给我们的所有请求头 getSessionId(map);//从请求头中获取SessionId } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } //System.out.println("获取结果:"+result); return result; } private void printCookie(Map> map) { System.out.println("输出Cookie:"); for(String key :map.keySet()) { System.out.println("key= "+ key + " and value= " + map.get(key)); } } private void getSessionId(Map> map) { List sResult = map.get("Set-Cookie");//从请求头中获取Cookie信息 if(sResult!=null&&sResult.size()>1)//从Cookie中获取SessionId { sessionId = sResult.get(1); sessionId = sessionId.substring(0, sessionId.indexOf(";")+1); System.out.println("获取sessionId:"+sessionId); } }
相关文章推荐
- java_web用户的自动登录模块的实现
- JavaWeb_使用Cookie模拟实现自动登录
- Redis缓存Mysql模拟用户登录Java实现实例
- Java-->IO流模拟实现用户登录以及登录信息
- c# winform实现网页上用户自动登陆,模拟网站登录
- java_web用户的自动登录模块的实现
- python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
- python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
- Redis缓存Mysql模拟用户登录Java实现实例[www]
- java_web用户的自动登录模块的实现
- java_web用户的自动登录模块的实现
- Redis缓存Mysql模拟用户登录Java实现实例
- Java模拟登录微信平台,主动推送消息给用户,自动绑定url、token等
- java web session+cookie实现用户自动登录
- java实现用户自动登录
- java_web 记录用户自动登录用户密码 模块的实现
- c# 实现网页上用户自动登陆|asp.net 模拟网站登录
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- java验证用户是否已经登录 java实现自动登录