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这样的好工具要是被这样的问题绊住而放弃真是太不值了。

你可能感兴趣的:(IE,浏览器,咨询,Web,Google)