关闭

HttpClient设置HTTP请求头Header

73465人阅读 评论(1) 收藏 举报
分类:

用Firebug对POST的数据进行监控 请求 HTTP头 信息,得到如下内容:

Java代码  收藏代码
  1. Accept  application/json, text/javascript, */*  
  2. Accept-Encoding gzip, deflate  
  3. Accept-Language en-us,en;q=0.5  
  4. Cache-Control   no-cache  
  5. Content-Length  432  
  6. Content-Type    application/x-www-form-urlencoded; charset=UTF-8  
  7. Host    www.huaxixiang.com  
  8. Pragma  no-cache  
  9. Proxy-Connection    keep-alive  
  10. Refere   http://www.huaxixiang.com/CrossPriceDetail.action  
  11. User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0  
  12. X-Requested-With    XMLHttpRequest  

 

 

用HttpClient模仿浏览器访问页面,加载URL的HTML信息,为了良好的加载网站的信息,不被限制.

为了说明请求头的信息添加了一个小测试项目LoginTest,添加页面index.jsp,添加主要代码打印Http Header的JSP页面.

主要打印Http Header信息.

1. index.jsp

 

Java代码  收藏代码
  1. out.println("Protocol: " + request.getProtocol());   
  2. out.println("Scheme: " + request.getScheme());   
  3. out.println("Server Name: " + request.getServerName() );   
  4. out.println("Server Port: " + request.getServerPort());   
  5. out.println("Protocol: " + request.getProtocol());   
  6. out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());   
  7. out.println("Remote Addr: " + request.getRemoteAddr());  
  8. out.println("Remote Host: " + request.getRemoteHost());   
  9. out.println("Character Encoding: " + request.getCharacterEncoding());   
  10. out.println("Content Length: " + request.getContentLength());   
  11. out.println("Content Type: "+ request.getContentType());   
  12. out.println("Auth Type: " + request.getAuthType());   
  13. out.println("HTTP Method: " + request.getMethod());   
  14. out.println("Path Info: " + request.getPathInfo());   
  15. out.println("Path Trans: " + request.getPathTranslated());   
  16. out.println("Query String: " + request.getQueryString());   
  17. out.println("Remote User: " + request.getRemoteUser());   
  18. out.println("Session Id: " + request.getRequestedSessionId());   
  19. out.println("Request URI: " + request.getRequestURI());   
  20. out.println("Servlet Path: " + request.getServletPath());   
  21. out.println("Accept: " + request.getHeader("Accept"));   
  22. out.println("Host: " + request.getHeader("Host"));   
  23. out.println("Referer : " + request.getHeader("Referer"));   
  24. out.println("Accept-Language : " + request.getHeader("Accept-Language"));   
  25. out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));   
  26. out.println("User-Agent : " + request.getHeader("User-Agent"));   
  27. out.println("Connection : " + request.getHeader("Connection"));   
  28. out.println("Cookie : " + request.getHeader("Cookie"));   
  29. out.println("Created : " + session.getCreationTime());   
  30. out.println("LastAccessed : " + session.getLastAccessedTime());   

 

2. 使用IE浏览器加载http://127.0.0.1:8080/LoginTest/index.jsp返回内容如下:

 

Java代码  收藏代码
  1. Protocol: HTTP/1.1   
  2. Scheme: http   
  3. Server Name: 127.0.0.1   
  4. Server Port: 8080   
  5. Protocol: HTTP/1.1   
  6. Server Info: Apache Tomcat/6.0.18   
  7. Remote Addr: 127.0.0.1   
  8. Remote Host: 127.0.0.1   
  9. Character Encoding: null   
  10. Content Length: -1   
  11. Content Type: null   
  12. Auth Type: null   
  13. HTTP Method: GET   
  14. Path Info: null   
  15. Path Trans: null   
  16. Query String: null   
  17. Remote User: null   
  18. Session Id: E2C384C095E34AD355684EB554517FB1   
  19. Request URI: /LoginTest/index.jsp   
  20. Servlet Path: /index.jsp   
  21. Accept: */*   
  22. Host: 127.0.0.1:8080   
  23. Referer : null   
  24. Accept-Language : en-us   
  25. Accept-Encoding : gzip, deflate   
  26. User-Agent : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)   
  27. Connection : Keep-Alive   
  28. Cookie : JSESSIONID=E2C384C095E34AD355684EB554517FB1   
  29. Created : 1322294859981   
  30. LastAccessed : 1322294859981  

 

3.  后面使用HttpClient不设置header信息加载http://127.0.0.1:8080/LoginTest/index.jsp信息如下:

 

Java代码  收藏代码
  1. Protocol: HTTP/1.1  
  2. Scheme: httpServer   
  3. Name: 127.0.0.1  
  4. Server Port: 8080  
  5. Protocol: HTTP/1.1  
  6. Server Info: Apache Tomcat/6.0.18  
  7. Remote Addr: 127.0.0.1  
  8. Remote Host: 127.0.0.1  
  9. Character Encoding: null  
  10. Content Length: -1  
  11. Content Type: null  
  12. Auth Type: null  
  13. HTTP Method: GET  
  14. Path Info: null  
  15. Path Trans: null  
  16. Query String: null  
  17. Remote User: null  
  18. Session Id: null  
  19. Request URI: /LoginTest/index.jspServlet   
  20. Path: /index.jsp  
  21. Accept: null  
  22. Host: 127.0.0.1:8080  
  23. Referer : null  
  24. Accept-Language : null  
  25. Accept-Encoding : null  
  26. User-Agent : Apache-HttpClient/4.1.1 (java 1.5)  
  27. Connection : Keep-Alive  
  28. Cookie : null  
  29. Created : 1322293843369  
  30. LastAccessed : 1322293843369  

 

分析: 由于这里纯粹加载页面,没有动用CookieStore自动管理Cookie,在上面没有能显示Cookie,SessionID的信息,区别于浏览器的的User-Agent,Cookie,SessionID,Accept,Accept-Language,Accept-Encoding等信息都没有进行设置.

对于爬取网站在HttpClient中设置Host,Referer,User-Agent,Connection,Cookie和爬取的频率和入口Url有讲究.

 

4. 考虑设置HttpClient的Header信息代码:

 

Java代码  收藏代码
  1. HashMap<String, String> headers = new HashMap<String, String>();  
  2. headers.put("Referer", p.url);  
  3. headers.put("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.6) Gecko/20100625   
  4.   
  5. Firefox/3.6.6 Greatwqs");  
  6. headers.put("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");  
  7. headers.put("Accept-Language","zh-cn,zh;q=0.5");  
  8. headers.put("Host","www.yourdomain.com");  
  9. headers.put("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");  
  10. headers.put("Referer""http://www.yourdomian.com/xxxAction.html");  
  11. HttpRequestBase httpget = ......  
  12. httpget.setHeaders(headers);  

 

 5. 由新的HttpClient执行http://127.0.0.1:8080/LoginTest/index.jsp得到的HTML信息如下:

 

Java代码  收藏代码
  1. Protocol: HTTP/1.1  
  2. Scheme: http  
  3. Server Name: www.yourdomain.com  
  4. Server Port: 80  
  5. Protocol: HTTP/1.1  
  6. Server Info: Apache Tomcat/6.0.18  
  7. Remote Addr: 127.0.0.1  
  8. Remote Host: 127.0.0.1  
  9. Character Encoding: null  
  10. Content Length: -1  
  11. Content Type: null  
  12. Auth Type: null  
  13. HTTP Method: GET  
  14. Path Info: null  
  15. Path Trans: null  
  16. Query String: null  
  17. Remote User: null  
  18. Session Id: null  
  19. Request URI: /LoginTest/index.jsp  
  20. Servlet Path: /index.jsp  
  21. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
  22. Host: www.yourdomain.com  
  23. Referer : http://www.yourdomian.com/xxxAction.html  
  24. Accept-Language : zh-cn,zh;q=0.5  
  25. Accept-Encoding : null  
  26. User-Agent : Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6   
  27.   
  28. Greatwqs  
  29. Connection : Keep-Alive  
  30. Cookie : null  
  31. Created : 1322294148709  
  32. LastAccessed : 1322294148709  

 

1
20
查看评论

利用HttpClient发送基于Content-Type="multipart/form-data"形式的表单

一、利用HttpClient发送基于Content-Type="multipart/form-data"形式的表单 package com.test.httpclient; import java.io.IOException; import java.util.Map; ...
  • gao12333
  • gao12333
  • 2017-06-19 13:41
  • 1161

httpclient编码

这几天都在纠结Java Web开发中的中文编码问题。其实,很多Java Web开发者都被中文编码“折磨”过,网络上有大量的讨论。以前我也读过这方面的博文,读完后感觉似乎懂了,好像知道了编码问题的原因和解决方法。但是, 一旦投入到实际开发中,发现自己其实没懂,囧!    ...
  • xingyue425
  • xingyue425
  • 2012-02-14 17:36
  • 20753

HttpClient中头部Header的使用

今天看了几个使用HttpClient设置头部信息的帖子,发现使用的Header都是commons-httpclient包中的: import org.apache.commons.httpclient.Header; 但是commons-httpclient是一个遗留版本,官方已...
  • blue_jjw
  • blue_jjw
  • 2013-04-07 17:16
  • 75525

轻松把玩HttpClient之封装HttpClient工具类(六),封装输入参数,简化工具类

在写这个工具类的时候发现传入的参数太多,以至于方法泛滥,只一个send方法就有30多个,所以对工具类进行了优化,把输入参数封装在一个对象里,这样以后再扩展输入参数,直接修改这个类就ok了。       不多说了,先上代码:/** * 请求配置类 * ...
  • xiaoxian8023
  • xiaoxian8023
  • 2016-02-29 21:55
  • 6219

HttpGet &&HttpPost方法发送header,params, Content

public static JSONObject post(String url,JSONObject json,Map headers){ HttpClient client = new DefaultHttpClient(); HttpPost post = ...
  • fhlkm
  • fhlkm
  • 2012-08-08 17:51
  • 57815

JAVA HTTPclient头中增加自定义的属性

原文:http://blog.csdn.net/z69183787/article/details/25372971 场景是这样的,第三方页面访问需要鉴权,所以需要在HTTP头中增加鉴权的属性和内容发送给第三方网页。 我试过用response.addHeader("Authoriza...
  • chuntian_feng
  • chuntian_feng
  • 2016-07-10 14:45
  • 4300

HttpClient设置请求头模拟浏览器

之前的HelloWorld 爬虫一些特殊网站  package com.gcx.demo.HelloWorld2; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHtt...
  • gcxzflgl
  • gcxzflgl
  • 2017-07-12 20:27
  • 1569

HTTPClient Referer 解决403 forbidden

package fdl;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.net.MalformedURLException;import java.net.URL;...
  • bingdongguke
  • bingdongguke
  • 2011-03-04 11:11
  • 8004

轻松把玩HttpClient之封装HttpClient工具类(七),新增验证码识别功能

这个HttpClientUtil工具类分享在GitHub上已经半年多的时间了,并且得到了不小的关注,有25颗star,被fork了38次。有了大家的鼓励,工具类一直也在完善中。最近比较忙,两个多月前的修改在今天刚修改测试完成,今天再次分享给大家。       ...
  • xiaoxian8023
  • xiaoxian8023
  • 2016-06-07 23:05
  • 9800

看好你的门-客户端传数据(5)-用java修改referer

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。1、 简单说明 Referer用来表明,浏览器向 WEB 服务器表明自己来自哪里。 但是就它本身而言,并非完全安全。 写一个例子,可以任意修改http信息头中的referer2、 准备:...
  • ffm83
  • ffm83
  • 2015-03-06 12:52
  • 2114
    个人资料
    • 访问:9402866次
    • 积分:78859
    • 等级:
    • 排名:第21名
    • 原创:264篇
    • 转载:2895篇
    • 译文:3篇
    • 评论:803条
    文章分类
    最新评论