`
gstarwd
  • 浏览: 1536914 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

httpclient之 cookies问题解决办法1

阅读更多

想试试HtmlUnit在测试网页上的表现,访问一个网页跳转到下一个网页之后,总是返回在server上找不到的页面,用IE访问就是好的。 另外有个奇怪的现象,在IE访问网页之后,再run写好的HtmlUnit代码就能顺利通过。关了IE之后,10分钟左右,代码都能通过。超过这个时间之 后,就怎么折腾也通不过。
    根据这个现象分析,感觉很象是cookie在捣鬼。cookie有效的时候,HtmlUnit代码就能用IE产生的cookie发送请求,cookie失 效之后,server端对cookie验证不通过,自然指向错误提示的页面。
    接下来在HtmlUnit的老巢里一通搜索,能找到的信息是在可怜。开源的东西,一个最大的短处就是文档很不完善。不过这也是人家可以赚钱的地方,什么东 西都公布出来整理成文档了,哪一天商业化了,咨询费一分钱都收不到了。
    最终还是通过google搜到了HtmlUnit的wiki ,它的站点还是有不少有用的信息,其中有一个帖 子 ,题目是Single Cookie Header,内容如下:
Some web sites, especially those driven by Microsoft products (in my experience), require that cookies be sent from the web browser back to the server using a single Cookie: http header. The default behavior of HtmlUnit , which uses commons-httpclient , is to send multiple Cookie: headers, one for each cookie. See Bug 1117500 for details.
    意思是说,有些站点(大多数是使用微软产品的)要求cookie从浏览器端发送到server时,要使用单一cookie。而HtmlUnit用的 HttpClient却是多个cookie。用一句 System . setProperty ( "apache.commons.httpclient.cookiespec" , CookiePolicy . BROWSER_COMPATIBILITY );
或者 DefaultHttpParams.getDefaultParams().setBooleanParameter(HttpMethodParams.SINGLE_COOKIE_HEADER, true); (我用的是后面这个)
就可以解决问题了。

    这样说来,即使发送的内容一样,但因为不是一次发送完成,服务期端就会认为cookie的内容不正确。这个我在用HttpClient做工具的时候已经遇 到过一次。花了2天时间,仔细研究真实浏览器和这个假浏览器之间到底有什么差异。时间长了都要忘记了,这次又遇到这样的问题,还是记下来的好,免得以后又 要忘记。
    HtmlUnit这样的好工具要是被这样的问题绊住而放弃真是太不值了。

分享到:
评论

相关推荐

    HttpClient-4.3.6

    2. **examples** 目录:这个目录提供了使用HttpClient的示例代码,涵盖了各种常见的HTTP操作,如GET、POST、PUT、DELETE等方法,以及处理重定向、认证、cookies、多线程等场景。通过这些示例,开发者可以快速理解...

    httpclient4中文API和使用

    `httpClient笔记.docx`可能是用户或教程作者整理的关于使用HttpClient的笔记或实战案例,可能包括一些常见问题的解决方案,比如处理重定向、处理cookies、上传下载文件、使用HTTPS等。 学习HttpClient时,除了API...

    HttpClient4.5源码

    2. **httpclient**:这是HttpClient的核心模块,实现了基本的HTTP协议功能,如GET、POST、PUT等请求方法,以及处理响应、重定向、cookies和连接管理。 3. **httpclient-cache**:这个模块提供了HTTP缓存支持,遵循...

    org.apache.commons.httpclient-3.1.jar

    - `commons-httpclient-3.1.jar`:这是HttpClient的主要库文件,包含了所有必要的类和方法。 - `RELEASE_NOTES.txt`:记录了该版本的发布说明,包括新特性、改进和已知问题。 - `LICENSE.txt`:包含了Apache Commons...

    commons-httpclient-2.0

    2. **依赖冲突**:如果项目中同时使用了其他库,可能会与HttpClient产生版本冲突,需要检查并解决。 3. **兼容性测试**:在升级后,必须进行全面的兼容性和功能测试,确保新版本在所有预期场景下都能正常工作。 ...

    HTTPClient 4.3.X

    描述中提到的链接指向了一个ITEYE博客,虽然内容未给出,但可以推测博主可能分享了关于使用HTTPClient 4.3.X的一些经验,可能包括配置,最佳实践,或者是遇到的问题及解决方案。 标签 "源码" 暗示我们可能会讨论到...

    C# HttpClient Cookie验证解决方法

    自实现的cookie 验证,远程取值的例子 以下代码配合HttpClient使用可以实现跨域(cookie的读写) //验证 代码如下: HttpClient httpClient = new HttpClient(url, null, true); httpClient.PostingData.Add(key,value)...

    HttpClient for android 4 3 5 jar

    在Android中,HttpClient库提供了与Web服务器进行HTTP通信的能力,支持各种HTTP方法(如GET、POST等),以及处理cookies、重定向、认证等功能。这个"HttpClient for android 4.3.5 jar"包含了两个文件:`httpclient-...

    httpClient

    描述中提到的"解压文件导入两个包即可解决问题",指的是在使用HttpClient时,通常需要导入两个核心的JAR文件:httpclient-4.2.5.jar和httpcore-4.4.4.jar。这两个库是HttpClient的核心组件: 1. **httpclient-4.2.5...

    httpclient

    1. **HttpClient的基本使用**:包括创建HttpClient实例,设置HTTP请求参数(如URL、方法、头部、实体内容),发送请求并获取响应。 2. **连接管理**:HttpClient的连接池管理,如设置最大连接数,超时时间,重试...

    httpclient 静态化网站 project

    1. **Apache HttpClient**:HttpClient是Apache Jakarta下的一个开源项目,提供了对HTTP协议的全面支持,包括各种HTTP方法(GET、POST等)、连接管理、重定向处理、身份验证、cookies管理等。开发者可以通过...

    HttpClient入门教程全解

    除了阅读官方文档和源代码,还可以参考各种在线教程、Stack Overflow问答以及Apache HttpClient的用户指南,以加深理解和解决问题。 10. **总结** HttpClient是Java开发者不可或缺的工具,通过理解和实践,你可以...

    httpclient tutorial

    通过不断的实践与问题解决,你将能够更熟练地掌握HttpClient的使用,以及其背后的HTTP协议知识。此外,考虑到HttpClient是网络请求的高频使用组件,应该特别注意其安全性的配置与实践,避免潜在的网络攻击,如重放...

    httpClient4.1入门教程.docx

    它支持各种 HTTP 方法(GET, POST, PUT, DELETE 等),可以处理复杂的 HTTP 头部信息,支持身份验证、重定向、cookies 管理以及多路复用连接等特性。此外,HttpClient 还考虑到了性能和可扩展性,允许开发者根据需求...

    Java爬虫【一篇文章精通系列-案例开发-巨细】HttpClient5 + jsoup + WebMagic + spider

    对于这些问题,你需要掌握如设置User-Agent、处理Cookies、使用Selenium或PhantomJS解决动态内容、利用ExecutorService进行并发爬取以及使用数据库如MySQL或MongoDB存储数据等技巧。 总之,通过学习和掌握...

    httpClient_httpParser.jar

    HttpClient允许开发者执行各种HTTP方法(如GET、POST、PUT等),处理重定向、cookies、认证以及连接管理。其核心特性包括: 1. **异步与同步API**:HttpClient提供了同步和异步两种工作模式,满足不同场景的需求。...

    httpclient依赖jar包和自己写的客户端例子

    HTTPClient是一个广泛使用的Java库,用于执行HTTP请求。它提供了丰富的功能,包括GET、POST、PUT、DELETE等HTTP方法的支持,以及处理...如果还有问题,可能需要查阅HTTPClient的官方文档或在线社区,寻找解决方案。

Global site tag (gtag.js) - Google Analytics