我想创建一个小型Java应用程序,将一些wiki内容从一台服务器复制到另一台服务器。 API为based on the XML-RPC。
基本上我有三种方法,login
,getPage
和putPage
。我使用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的使用范围。最后,它是目标维基端的配置问题。这里的答案帮助我在另一个论坛中提出了正确的问题。
答案 0 :(得分:5)
默认情况下,Cookie由HTTPClient处理。你不应该做任何让cookie正常工作的事情。
来源: http://www.innovation.ch/java/HTTPClient/getting_started.html#cookies
编辑Apache HTTP客户端:
Apache HTTP Client的行为相同: - )
答案 1 :(得分:1)
您可以使用HTTP客户端手动设置Cookie,但它会正确处理您在连接期间创建的Cookie。
HttpClient支持自动管理cookie,包括允许服务器设置cookie并在需要时自动将它们返回给服务器。也可以手动设置要发送到服务器的cookie。
资源:
答案 2 :(得分:1)
当我想用HttpClient
接受cookie时,我一直使用它postPutPage.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);