Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用HttpClient Post登录到站点_Java_Authentication_Cookies_Post_Httpclient - Fatal编程技术网

Java 使用HttpClient Post登录到站点

Java 使用HttpClient Post登录到站点,java,authentication,cookies,post,httpclient,Java,Authentication,Cookies,Post,Httpclient,我正在尝试做一个程序,登录到一个网站,并执行一些自动化的活动。我一直在使用HttpClient 4.0.1,并使用它开始使用: 在这个特定的站点上,cookie不是通过“set cookie”头设置的,而是用javascript设置的 到目前为止,我无法实现登录 我试过以下几件事: 为firebug中出现的所有请求标头手动添加标头 NameValuePair[]数据={ 新的BasicNameValuePair(“主机”,主机), 新的BasicNameValuePair(“用户代理”、“Moz

我正在尝试做一个程序,登录到一个网站,并执行一些自动化的活动。我一直在使用HttpClient 4.0.1,并使用它开始使用:

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

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

我试过以下几件事:

  • 为firebug中出现的所有请求标头手动添加标头
  • NameValuePair[]数据={ 新的BasicNameValuePair(“主机”,主机), 新的BasicNameValuePair(“用户代理”、“Mozilla/5.0(Macintosh;U;Intel Mac OS X 10.5;en-US;rv:1.9.1.7)Gecko/20091221 Firefox/3.5.7”), 新的BasicNameValuePair(“接受”,“文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,*/*;q=0.8”), 新的BasicNameValuePair(“接受语言”,“en-us,en;q=0.5”), 新的BasicNameValuePair(“接受编码”、“gzip、deflate”), 新的BasicNameValuePair(“接受字符集”、“ISO-8859-1,utf-8;q=0.7,*;q=0.7”), 新BasicNameValuePair(“保持活力”、“300”), 新的BasicNameValuePair(“连接”,“保持活动”), 新的BasicNameValuePair(“Referer”,Referer), 新的BasicNameValuePair(“Cookie”,cookiestr) }; for(NameValuePair对:数据){ loginPost.addHeader(pair.getName(),pair.getValue()); }
  • 使用setCookieStore创建基本客户端帐户和设置。不幸的是,我不知道如何测试cookies是否真的被发送。还有,是否有办法测试发送的其他自动参数?(如正在模拟哪个浏览器等)
  • 我得到的回应是:HTTP/1.1417预期失败

    我还是个新手,所以有人能马上知道问题出在哪里吗?如果没有,我将发布更多详细信息、代码和网站。

    您需要或。第一个是网络分析器(因此您将看到在非常低的级别上发生了什么);第二个作为代理-透明度较低,但级别较高

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

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

    method.setRequestHeader("Cookie", "special-cookie=value");
    

    我会附和上面的评论——使用Wireshark可以清楚地了解客户发送的内容。我刚刚用Wireshark调试了一个类似的问题。基本的

    如果您还没有这样做,我建议您特别研究“基于表单的登录”中的示例


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

    我已经在这样做了,但并不是所有cookie都是这样设置的。另外,我认为setRequestHeader适用于旧版本的httpclient。
    method.setRequestHeader("Cookie", "special-cookie=value");