【问题标题】:httpclient - use cookies with POST messagehttpclient - 使用带有 POST 消息的 cookie
【发布时间】:2010-09-03 15:04:56
【问题描述】:

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

基本上我有三种方法,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

应该这样工作还是我必须手动将 cookie 添加到第二个 post 方法,如果是,如何?


编辑/解决方案

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

【问题讨论】:

    标签: java httpclient xml-rpc


    【解决方案1】:

    Cookie 默认由 HTTPClient 处理。您无需执行任何操作即可让 cookie 正常工作。

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


    为 Apache HTTP 客户端编辑:

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

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

    【讨论】:

    • 抱歉,刚刚意识到,周围的“httpclients”太多了。我正在使用 Apache HttpClient,引用的页面让我感到紧张,但它描述了一个 HTTPClient,这是不同的。编辑了我的问题,使其更清晰。
    • 我编辑了我的答案以匹配 Apache HTTP 客户端,但行为完全相同:-)
    【解决方案2】:

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

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


    资源:

    【讨论】:

    • 上面写着when required,HttpClient怎么知道第二个POST方法需要cookie呢?或者与服务器有一些握手协议——比如服务器接收到 POST 然后请求 cookie?
    • 当 HTTPClient 连接到您的服务器时,我认为 cookie 协议 会告诉(取决于协议)是否需要 cookie。但我必须说,我什至不知道关于 cookie 的 RFC。无论如何,HTTPClient 会为您处理。
    【解决方案3】:

    当我想通过 HttpClient 接受 cookie 时,我曾经使用过这个

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

    【讨论】:

    • 也试过了,但没有成功 - 更糟糕的是,在第二次 executeMethod 调用后,我的 cookie 被覆盖/部分删除了...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2019-05-22
    • 2014-05-20
    相关资源
    最近更新 更多