3

我正在尝试制作一个登录网站并执行一些自动化活动的程序。我一直在使用 HttpClient 4.0.1,并使用它开始:http ://hc.apache.org/httpcomponents-client/primer.html 。

在这个特定站点上,cookie 不是通过“set-cookie”标头设置的,而是在 javascript 中设置的。

到目前为止,我无法实现登录。

我尝试了以下事情:

  1. 为出现在 firebug 中的所有请求标头手动添加标头
   名称值对 [] 数据 = {
         新的 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("接受","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("接受字符集","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),
         新的 BasicNameValuePair("Cookie",cookiestr)
   };

   for(NameValuePair 对:数据){
      loginPost.addHeader(pair.getName(),pair.getValue());
   }

  1. 创建 BasicClientCookies 并使用 setCookieStore 进行设置。不幸的是,我不知道如何测试 cookie 是否真的被发送。另外,有没有办法测试正在发送哪些其他自动参数?(比如正在模拟哪个浏览器等)。

我得到的响应是:HTTP/1.1 417 Expectation Failed

我还是新手,所以有人知道问题可能是什么吗?如果没有,我将发布更多详细信息、代码和站点。

4

3 回答 3

1

您需要WireSharkFiddler。第一个是网络分析器(因此您会在非常低的级别上看到正在发生的事情);第二个充当代理 - 不太透明,但更高级别。

这样,您可以详细查看使用浏览器登录时发生的情况,以及尝试在代码中执行相同操作时发生的情况。

于 2010-01-14T07:46:09.633 回答
1

我会回应上面的评论 - 使用 Wireshark 清楚地了解从您的客户端发送的内容。我刚刚用 Wireshark 自己调试了一个类似的问题。基本的。

如果您还没有这样做,我建议您研究http://hc.apache.org/httpcomponents-client/examples.html中的示例,尤其是“基于表单的登录”。

我会避免使用 BasicNameValuePair 设置 Http 标头,HttpClient 应该为您提供基础知识。使用 HttpParams 和 HttpConnectionParams/HttpProtocolParams 进一步修改。示例 conn/ManagerConnectDirect 显示了如何修改标头。

于 2010-01-14T16:29:54.253 回答
0

您可以使用 FireBug 的“net”功能来查看使用浏览器登录时发生的情况。这样您应该能够确定哪个方法生成 cookie 值,以及应该如何设置它(哪个路径、名称)。使用它自己在 HttpClient 上设置 cookie,例如:

method.setRequestHeader("Cookie", "special-cookie=value");
于 2010-01-14T09:21:48.290 回答