用httpclient模拟登陆网站注意事项

2024-06-22 05:48

本文主要是介绍用httpclient模拟登陆网站注意事项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近一直在用httpclient进行模拟登陆网站,即先用httpwatch记录手动登陆时浏览器与服务器之间的数据交互,然后用httpclient模拟浏览器的行为进行登陆。

但是一开始进行模拟时总是登陆不成功,即使发送的内容与httpwatch中记录的内容一致时,也是返回不了正确的结果,经过网上搜索和尝试,发现是发送请求时,请求头的信息不够完整。同样的请求体,如果把请求头的信息尽量完善,就能够成功登陆,否则则是登陆失败。

其次还要注意第一次向服务器请求时,服务器一般都会返回一个“Set-Cookie”字段,把这个字段中的内容(如sessionid)记录下来,添加到cookie中,再次向服务器发请求时带上cookie,这样就能有很大概率登陆成功了。

下面是一个模拟登陆的代码,其中包括对于验证码的处理

public static void main(String[] args) throws HttpException, IOException {HttpClient client = new HttpClient();String url = "http://www.xxxxx.com/user/login.html";GetMethod getMethod = new GetMethod(url);getMethod.setRequestHeader("Host", "www.xxxxxx.com");  getMethod.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; NP06; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0)");  getMethod.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");  getMethod.setRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");  getMethod.setRequestHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");  getMethod.setRequestHeader("Connection", "keep-alive");  getMethod.setRequestHeader("Cache-Control", "max-age=0");client.executeMethod(getMethod);Header header = getMethod.getResponseHeader("Set-cookie");//记录服务器返回的cookie值   System.out.println(header.getValue());  String headerCookie = header.getValue();  String SessionId = headerCookie.substring(headerCookie.indexOf("ASP.NET_SessionId=") + "ASP.NET_SessionId=".length(), headerCookie.indexOf(";"));  System.out.println(SessionId); StringBuffer sb = new StringBuffer();sb.append("Hm_lvt_ebd37b04edd1e0fceaa52dc641b8ff6f=1412760752,1412820282; sgsa_id=anxin.com|1412760752435322; _ga=GA1.2.1171830066.1412760753; cuuid=E407DF6BFFBF4599; _gat=1; Hm_lpvt_ebd37b04edd1e0fceaa52dc641b8ff6f=1412820282; sgsa_vt_187935_192889=1412820281676; CNZZDATA1252986781=736053870-1412760776-%7C1412820303; dntadmin=;");sb.append("ASP.NET_SessionId=").append(SessionId).append("; ");String cookie = sb.toString();System.out.println(cookie);getMethod = new GetMethod("http://www.xxxxxx.com/vcode.aspx?xxxx=xxxxx&x=x");//获取验证码client.executeMethod(getMethod);InputStream is = getMethod.getResponseBodyAsStream();File file = new File("D:/image.png");//图片格式根据具体情况而定(有些网站在获取验证码时也要发送带cookie的请求头,要注意具体情况具体分析)FileOutputStream fos = new FileOutputStream(file);byte b[] = new byte[1024];int j = 0;while((j=is.read(b))!=-1){fos.write(b, 0, j);}fos.flush();fos.close();String key = "";System.out.println("请输入验证码");Scanner scanner = new Scanner(System.in);key = scanner.nextLine();client.getHostConfiguration().setHost("www.xxxxxx.com", 80, "http");  PostMethod method = getPostMethod(key);  method.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; NP06; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0)");  method.setRequestHeader("Host", "www.xxxxxx.com");  method.setRequestHeader("Accept", "application/json, text/javascript, */*");  method.setRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");  
//      method.setRequestHeader("Accept-Encoding", "gzip, deflate");  method.setRequestHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");  method.setRequestHeader("Connection", "keep-alive");  method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");  method.setRequestHeader("X-Requested-With", "XMLHttpRequest");  method.setRequestHeader("Referer", "http://www.xxxxxx.com/user/login.html");  method.setRequestHeader("Cookie", cookie);   client.executeMethod(method);  System.out.println(method.getStatusCode());  System.out.println(method.getResponseBodyAsString());Header header1 = method.getResponseHeader("Set-cookie");   sb.append(header1.getValue());  Cookie[] cookies = client.getState().getCookies();  method.releaseConnection();  String my = "http://www.xxxxx.com/usercenter";  System.out.println(sb.toString());  getMethod = new GetMethod(my);  getMethod.setRequestHeader("Host", "www.xxxxx.com");  getMethod.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; NP06; .NET4.0C; .NET4.0E; InfoPath.3; Media Center PC 6.0)");  getMethod.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");  getMethod.setRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");  getMethod.setRequestHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");  getMethod.setRequestHeader("Connection", "keep-alive");  getMethod.setRequestHeader("Referer", "http://www.xxxxx.com/user/login.html");  getMethod.setRequestHeader("Cookie", sb.toString());  int code = client.executeMethod(getMethod);  System.out.println(getMethod.getStatusCode());  System.out.println(getMethod.getResponseBodyAsString());  }private static PostMethod getPostMethod(String ValidCode) {  PostMethod post = new PostMethod("/ajax/xxxx.xxxx");  NameValuePair[] simcard = {  new NameValuePair("Action", "post"),  new NameValuePair("Keep", "0"),  new NameValuePair("sPassword", "xxxxx"),  new NameValuePair("sUserName", "xxxxx"),  new NameValuePair("sVerCode", ValidCode),  };  post.setRequestBody(simcard);  return post;  } 


这篇关于用httpclient模拟登陆网站注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083465

相关文章

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Python中__new__()方法适应及注意事项详解

《Python中__new__()方法适应及注意事项详解》:本文主要介绍Python中__new__()方法适应及注意事项的相关资料,new()方法是Python中的一个特殊构造方法,用于在创建对... 目录前言基本用法返回值单例模式自定义对象创建注意事项总结前言new() 方法在 python 中是一个

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Idea调用WebService的关键步骤和注意事项

《Idea调用WebService的关键步骤和注意事项》:本文主要介绍如何在Idea中调用WebService,包括理解WebService的基本概念、获取WSDL文件、阅读和理解WSDL文件、选... 目录前言一、理解WebService的基本概念二、获取WSDL文件三、阅读和理解WSDL文件四、选择对接