代码之家  ›  专栏  ›  技术社区  ›  Andreas Dolk

httpclient-将cookies与post消息一起使用

  •  1
  • Andreas Dolk  · 技术社区  · 15 年前
    < >我想创建一个小的Java应用程序来将一些wiki内容从一个服务器拷贝到另一个服务器。API是 基于xml-rpc

    基本上我有三种方法, login>, getpage and putpage 。我使用 apache http client 3.x 并设法使用 login 成功登录,以及 get page 正确从旧wiki获取页面。

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

    然后,我在同一个httpclient上使用另一个post方法执行 putpage server响应身份验证失败消息。

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

    httpclient client=new httpclient();
    postmethod postlogin=createnewpostmethod(“login”,“user”,“pw”);
    client.executeMethod(登录后);
    //现在我登录了,客户机已明确存储了cookie
    postmethod postputpage=createnewpostmethod(“putpage”,getpage());
    client.executeMethod(postputpage);//服务器不允许我放置该页
    < /代码> 
    
    

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


    编辑/解决方案

    在这个问题的答案的帮助下,我能够识别和解决HTTPClient之外的问题。最后,它是目标wiki端的一个配置问题。这里的答案帮助我在另一个论坛中提出正确的问题。.

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

    身份验证是通过cookies处理的:我登录到新的wiki,并且在相应的httpclient上设置了一些cookie。doku告诉我其中一个cookie是用来认证的。

    然后我执行推杆在同一个httpclient上使用另一个post方法,服务器将以身份验证失败消息响应。

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

    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端的一个配置问题。这里的答案帮助我在另一个论坛中提出正确的问题。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Vivien Barousse    15 年前

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

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


    为Apache HTTP客户端编辑:

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

    资料来源如下: http://hc.apache.org/httpclient-3.x/cookies.html

        2
  •  1
  •   Colin Hebert    15 年前

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

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


    资源:

        3
  •  1
  •   Joel    15 年前

    我曾经在接受httpclient的cookie时使用过这个。

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