httpclient - 使用带有POST消息的cookie

时间:2010-09-03 15:04:57

标签: java httpclient xml-rpc

我想创建一个小型Java应用程序,将一些wiki内容从一台服务器复制到另一台服务器。 API为based on the XML-RPC

基本上我有三种方法,logingetPageputPage。我使用Apache HttpClient 3.x设法使用login成功登录,getPage正确地从旧维基中获取页面。

身份验证由cookie处理:我登录到新的wiki,并在相应的httpclient上设置了一些cookie。 doku告诉我其中一个cookie用于验证。

然后我在同一个httpclient上使用另一个POST方法执行putPage,服务器以验证失败消息进行响应。

代码序列如下(非常简化):

HttpClient client = new HttpClient();
PostMethod postLogin = createNewPostMethod("login", "user", "pw");
client.executeMethod(postLogin);
// Now I'm logged in and the client definitly has stored the cookies
PostMethod postPutPage = createNewPostMethod("putPage", getPage());
client.executeMethod(postPutPage);  // the server won't let me put the page

它是否应该像那样工作,还是我必须手动将cookie添加到第二个帖子方法中,如果是,如何?


编辑/解决方案

在这个问题的答案的帮助下,我能够识别并解决问题,这超出了httpclient的使用范围。最后,它是目标维基端的配置问题。这里的答案帮助我在另一个论坛中提出了正确的问题。

3 个答案:

答案 0 :(得分:5)

默认情况下,Cookie由HTTPClient处理。你不应该做任何让cookie正常工作的事情。

来源: http://www.innovation.ch/java/HTTPClient/getting_started.html#cookies


编辑Apache HTTP客户端:

Apache HTTP Client的行为相同: - )

以下是来源: http://hc.apache.org/httpclient-3.x/cookies.html

答案 1 :(得分:1)

您可以使用HTTP客户端手动设置Cookie,但它会正确处理您在连接期间创建的Cookie。

  

HttpClient支持自动管理cookie,包括允许服务器设置cookie并在需要时自动将它们返回给服务器。也可以手动设置要发送到服务器的cookie。


资源:

答案 2 :(得分:1)

当我想用HttpClient

接受cookie时,我一直使用它
postPutPage.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);