(HttpClient技术)(HttpClient入门)HttpClient使用详细介绍
来源:互联网 发布:软件测试基础视频 编辑:程序博客网 时间:2024/05/21 10:33
1 前言
网络自动化操作,已经是网络发展中的一个重要趋势,很多复杂繁琐的操作,手动完成,得花费大量的时间,所以,网络自动化操作,就变得越来越普遍,越来越重要。很多应用,都可以使用网络自动化工具去完成,比如批量登陆签到,批量刷票,批量注册邮箱,批量查询用户余额等,那么网络自动化,在java中,应该用什么工具去开发呢,那么首先想到的应该就是HttpClient了,它是网络自动化操作方面,使用起来,实在是太方便了,应用也及其广泛。其他工具,比如HtmlUnit,虽然也有一定的使用,但是比起HttpClient来,实在差的太远了,那么HttpClient到底是什么,到底应该怎么使用呢,我在这里做一个介绍吧.
2 HttpClient介绍
HttpClient 是 Apache Jakarta Common 下的子项目,它封装了java中URLConnection工具,并且将URLConnection的方法使用,都做了优化,更好的兼容了Http的访问和使用,更好的管理了缓存和Cookies,并且兼容了所有的Http访问的方法,使得,所有的网站,都可以使用这个工具来访问,现在HttpClient最新版本为 4.4,但是最经典的版本是3.x,当然4.3以上的版本,也是相当好用的。
HttpClient 中,兼容了网络中常用的两种请求方法,分别是get和post,这两种方法,在3.x和4.x中的方法名,都是不一样的(当然,4.x封装的更为完全),但并不是说4.x就是最好用的版本,其实,3.x也有自己独到的一面,在对ssl处理方面,就比4.x,好用的多了。
简单介绍就说这么多了,下面就对,HttpClient的使用步骤,作个介绍;
3 HttpClient需要的jar包
HttpClint版本不一样,所需要的jar包也是不一样的,这里就简单介绍一下3.x和4.x所需要的jar包:
HttpClient3.x需要的jar包:
commons-httpclient-3.1.jar,commons-codec.jar,commons-io-1.4.jar,commons-lang-2.4.jar,commons-logging-1.1.jar,log4j-1.2.16.jar
HttpClient4.x需要的jar包:
httpclient-4.1.1.jar,httpclient-cache-4.1.1.jar,httpcore-4.1.jar,httpmime-4.1.1.jar,commons-logging-1.0.jar,log4j-1.2.16.jar
后面,我会提供一个专门的 地址给大家,方面下载;
4 HttpClient开发步骤
开发步骤,大体如下:
a 首先创建HttpClient实例
b 创建请求的方法,get请求创建get方法,post请求创建post方法
c 对创建的方法设置请求头(Header)setRequestHeader(setHeader)
d 使用httpClient实例,请求方法httpClient.executeMethod(g1)(httpClient.execute(g1))
e 查看请求状态,是否成功,(g1.getStatusCode() ),200表示请求成功
f 得到请求后的数据,如请求后的网页,请求后的cookies
g 释放链接,做其他处理;
5 与HttpClient配套的抓包工具
HttpClient是无法查看数据包的,如果我们要模拟网页行为,我们必须知道,网页都做所做了什么操作,传了什么参数,用了什么方法,那么,就只能使用抓包工具了,下面介绍几种与之相配用的工具:
首先,最好用,最广泛的,当然是HttpWatch了,这个兼容ie,使用起来,也很方便
然后,就是Fiddler,这个工具,使用人数也很多,他能兼容更多的浏览器
其他,其他的工具也多种多样,我们可以根据自己的需求,选择适合的工具
6 HttpClient开发实例
HttpClient有3.x和4.x等版本可以使用,这里上传一些例子,仅供学习和参考;
HttpClient3.x的163邮箱登陆的例子,仅供大家参考:
HttpClient httpClient = new HttpClient(); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000); httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000); httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); if(ip!=null && !ip.equals("")){ httpClient.getHostConfiguration().setProxy(ip, port) ; } GetMethod g1 = null; GetMethod g2 = null; PostMethod g3 = null; GetMethod g4 = null; GetMethod g5 = null; GetMethod g6 = null; GetMethod g67 = null; //TBlog try { g1 = new GetMethod("http://mail.163.com/") ; g1.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ; g1.setRequestHeader("Accept-Language", "zh-CN") ; g1.setRequestHeader("Connection", "Keep-Alive") ; g1.setRequestHeader("Host", "mail.163.com") ; //g1.setRequestHeader("Referer", "http://chuangshi.qq.com/") ; g1.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ; //g1.setRequestHeader("Cookie", cookies) ; httpClient.executeMethod(g1) ; String sg1 = g1.getResponseBodyAsString() ; //System.out.println(sg1); if(g1.getStatusCode() == 200 ){ String cookies = "starttime="+System.currentTimeMillis()+"; logType=; nts_mail_user="+username+":-1:1; df=mail163_letter" ; String urls = "https://mail.163.com/entry/cgi/ntesdoor?df=" + "mail163_letter" + "&from=web" + "&funcid=loginone" + "&iframe=1" + "&language=-1" + "&passtype=1" + "&product=mail163" + "&net=c&style=-1" + "&race=45_51_179_bj" + "&uid=" +username; g3 = new PostMethod(urls) ; g3.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ; g3.setRequestHeader("Accept-Language", "zh-CN") ; g3.setRequestHeader("Connection", "Keep-Alive") ; g3.setRequestHeader("Host", "mail.163.com") ; g3.setRequestHeader("Referer", "http://mail.163.com/") ; g3.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ; g3.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") ; g3.setRequestHeader("Cookie", cookies) ; NameValuePair[] data = { new NameValuePair("password",secret), new NameValuePair("savelogin","0"), new NameValuePair("url2","http://mail.163.com/errorpage/error163.htm"), new NameValuePair("username",username) }; g3.setRequestBody(data); g3.setRequestHeader("Content-Length", g3.getRequestEntity().getContentLength()+"") ; httpClient.executeMethod(g3) ; String sg3 = g3.getResponseBodyAsString() ; System.out.println(g3.getStatusCode()) ; if(g3.getStatusCode()==200 && sg3.indexOf("http://mail.163.com/js6/main.jsp")!=-1){ String cookiessession = "" ; Cookie[] cookiesssession = httpClient.getState().getCookies(); for (Cookie c : cookiesssession) { cookiessession += c.toString() + ";" ; } System.out.println("cookiessession:" + cookiessession); String urlmain = "" ; sg3 = sg3.substring(sg3.indexOf("http://mail.163.com/js6/main.jsp")) ; urlmain = sg3.substring(0, sg3.indexOf("\"")) ; if(urlmain.indexOf("sid=")!=-1){ String newurlmain = urlmain.substring(urlmain.indexOf("sid=")+4) ; if(newurlmain.indexOf("&")!=-1){ sid = newurlmain.substring(0, newurlmain.indexOf("&")) ; } } g1 = new GetMethod(urlmain) ; g1.setRequestHeader("Accept", "text/html, application/xhtml+xml, */*") ; g1.setRequestHeader("Accept-Language", "zh-CN") ; g1.setRequestHeader("Connection", "Keep-Alive") ; g1.setRequestHeader("Host", "mail.163.com") ; //g1.setRequestHeader("Referer", "http://chuangshi.qq.com/") ; g1.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)") ; g1.setRequestHeader("Cookie", cookiessession+cookies) ; httpClient.executeMethod(g1) ; String sg11 = g1.getResponseBodyAsString() ; //System.out.println(sg11) ; if(g1.getStatusCode()==200 && sg11.indexOf("<title>网易邮箱")!=-1 && sg11.indexOf("?ssid=")!=-1){ String cookiessession1 = "" ; Cookie[] cookiesssession1 = httpClient.getState().getCookies(); for (Cookie c : cookiesssession1) { cookiessession1 += c.toString() + ";" ; if(c.toString().indexOf("NTES_SESS=")!=-1){ NTES_SESS = c.toString().replace("NTES_SESS=", "") ; } if(c.toString().indexOf("Coremail=")!=-1){ Coremail = c.toString().replace("Coremail=", "") ; } } System.out.println("cookiessession:" + cookiessession1); sg11 = sg11.substring(sg11.indexOf("?ssid=")+6) ; ssid = sg11.substring(0, sg11.indexOf("'")); String cossss = cookiessession1 + cookies ; re = true ; cookiess = cossss ; }else{ System.out.println("2"); errorinfo = "登录失败,进入main.jsp失败" ; } }else{ System.out.println("2"); errorinfo = "登录失败,密码或者账号有误" ; } }else{ System.out.println("1"); errorinfo = "登录失败,无法访问163网站,请换ip" ; } }catch(Exception e){ System.out.println(e.toString()); //e.printStackTrace() ; }finally{ if(g1!=null){ g1.releaseConnection() ; } if(g2!=null){ g2.releaseConnection() ; } if(g3!=null){ g3.releaseConnection() ; } if(g4!=null){ g4.releaseConnection() ; } if(g5!=null){ g5.releaseConnection() ; } if(g67!=null){ g67.releaseConnection() ; } }
谢谢,欢迎大家 联系 ,大家相互进步!
- (HttpClient技术)(HttpClient入门)HttpClient使用详细介绍
- HttpClient 详细介绍
- Android入门:HttpClient介绍
- HttpClient使用详细解释
- Httpclient介绍及使用
- HttpClient
- HttpClient
- httpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- httpclient
- httpclient
- makefile教程
- 关于多线程libevent evbuffer_drain段错误
- 汤姆大叔的6道javascript编程题题解
- mysql分区常用操作
- 深入理解Linux网络技术内幕——IPv4 报文的传输发送
- (HttpClient技术)(HttpClient入门)HttpClient使用详细介绍
- android studio external tool 自定义工具
- 对角线元素之和
- ios申请真机调试( xcode 5)详细解析
- 怎么把pdf中的图片文字转换成excel
- App 开发常用工具及库
- the NTP socket is in use, exiting
- 工具类
- JavaScript 面试题汇总(一)