使用HttpClient Post登录网站

时间:2010-01-14 07:36:25

标签: java authentication cookies post httpclient

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

在此特定网站上,Cookie不是通过“set-cookie”标头设置的,而是通过javascript设置的。

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

我尝试过以下事项:

  1. 为firebug中显示的所有请求标头手动添加标头
  2.    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());
       }
    
    
    1. 创建BasicClientCookies并使用setCookieStore进行设置。不幸的是,我无法弄清楚如何测试cookie实际上是否被发送。还有,有没有办法测试发送其他自动参数? (比如正在模拟哪个浏览器等)。
    2. 我得到的回应是:HTTP / 1.1 417期望失败

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

3 个答案:

答案 0 :(得分:1)

您需要WireSharkFiddler。第一个是网络分析仪(所以你会看到正在发生的非常低的水平);第二个充当代理 - 不太透明,但更高层次。

通过这种方式,您可以详细了解使用浏览器登录时会发生什么,以及当您尝试在代码中执行相同操作时发生的情况。

答案 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");
相关问题