我正在尝试制作一个登录网站并执行一些自动化活动的程序。我一直在使用HttpClient 4.0.1,并使用它来开始:http://hc.apache.org/httpcomponents-client/primer.html。
在此特定网站上,Cookie不是通过“set-cookie”标头设置的,而是通过javascript设置的。
到目前为止,我无法登录。
我尝试过以下事项:
NameValuePair[] data = { new BasicNameValuePair("Host",host), new BasicNameValuePair("User-Agent"," Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7"), new BasicNameValuePair("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"), new BasicNameValuePair("Accept-Language","en-us,en;q=0.5"), new BasicNameValuePair("Accept-Encoding","gzip,deflate"), new BasicNameValuePair("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7"), new BasicNameValuePair("Keep-Alive","300"), new BasicNameValuePair("Connection","keep-alive"), new BasicNameValuePair("Referer",referer), new BasicNameValuePair("Cookie",cookiestr) }; for(NameValuePair pair : data){ loginPost.addHeader(pair.getName(),pair.getValue()); }
我得到的回应是:HTTP / 1.1 417期望失败
我还是新手,所以有人知道问题可能是什么吗?如果没有,我会发布更多详细信息,代码和网站。
答案 0 :(得分:1)
您需要WireShark或Fiddler。第一个是网络分析仪(所以你会看到正在发生的非常低的水平);第二个充当代理 - 不太透明,但更高层次。
通过这种方式,您可以详细了解使用浏览器登录时会发生什么,以及当您尝试在代码中执行相同操作时发生的情况。
答案 1 :(得分:1)
我回应上面的评论 - 使用Wireshark清楚地了解客户端发送的内容。我刚刚用Wireshark调试了一个类似的问题。是必不可少的。
如果您还没有这样做,我建议您研究http://hc.apache.org/httpcomponents-client/examples.html中的示例,尤其是“基于表单的登录”。
我避免使用BasicNameValuePair设置Http标头,HttpClient应该为您提供基础知识。使用HttpParams和HttpConnectionParams / HttpProtocolParams进一步修改。示例conn / ManagerConnectDirect显示了如何修改标头。
答案 2 :(得分:0)
您可以使用FireBug的“网络”功能查看使用浏览器登录时发生的情况。这样您就应该能够找出生成cookie值的方法,以及如何设置它(哪条路径,名称)。用它来自己设置HttpClient上的cookie,如:
method.setRequestHeader("Cookie", "special-cookie=value");