httpclient - 使用带POST消息的cookie

问题描述:

我想创建一个小的java应用程序,将一些wiki内容从一台服务器复制到另一台服务器。 API是based on the XML-RPChttpclient - 使用带POST消息的cookie

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

使用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 

它应该工作一样,或者我需要手动添加饼干到第二post方法,如果是,如何?


编辑/解决方案

随着这个问题的答案,我能够发现和解决问题,这是的HttpClient的使用之外的帮助。最后,这是目标wiki端的配置问题。这里的答案帮助我在另一个论坛上提出正确的问题。

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

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


编辑为Apache HTTP客户端:

Apache的HTTP客户端相同的行为:-)

这里是源: http://hc.apache.org/httpclient-3.x/cookies.html

+0

对不起,刚刚意识到,有太多'httpclients'了。我使用Apache HttpClient,引用的页面让我感到紧张,但它描述了一个HTTPClient,这是一个不同的东西。编辑我的问题,使其更清晰一点。 – 2010-09-03 15:16:43

+0

我编辑了我的答案,以匹配Apache HTTP客户端,但行为是完全相同的:-) – 2010-09-03 15:20:46

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

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


资源:

+0

它说*当需要时*,HttpClient如何知道第二个POST方法需要cookie?或者与服务器有一些握手协议 - 就像服务器接收到POST,然后请求cookies一样? – 2010-09-03 15:22:54

+0

当HTTPClient连接到您的服务器时,我认为* cookie协议*会告诉(取决于协议)是否需要cookie。但我必须说,我甚至都不知道cookie上有RFC。 无论如何,HTTPClient会为您处理。 – 2010-09-03 15:33:19

我历来用这个当我想接受Cookie与HttpClient的

postPutPage.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); 
+0

尝试过一个也没有成功 - 更糟糕的是,通过这个设置,我的cookie在第二个'executeMethod'调用后被覆盖/部分删除... – 2010-09-03 15:27:00