您的位置:首页 > 编程语言 > ASP

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

//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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息