HttpClient - 登录,然后丢失cookie

时间:2011-07-01 11:57:18

标签: java httpclient

在过去的几天里,我一直在撞墙挡住我的头,我无法解决这个问题所以我祈祷有人可以帮助我。

基本上我正在登录一个WordPress帐户,我发布登录详细信息并获得一个cookie,显示我已登录,然后我尝试访问用户维护面板,然后我被重定向回登录页面。当我循环访问我的cookie时,似乎我的登录cookie已经消失了。我甚至使用新的v4 HttpClient,据说它有更好的cookie管理。

如果有人知道发生了什么,我真的很感激。

这是一个功能齐全的例子:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.List;

public class FormLoginDemo
{

    public static void main(String args[])
    {
        try
        {

            DefaultHttpClient httpclient = new DefaultHttpClient();

            HttpGet httpget = new HttpGet("http://www.articlepub.com/wp-login.php");

            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();

            System.out.println("Login form get: " + response.getStatusLine());
            if (entity != null) {
                EntityUtils.consume(entity);
            }
            System.out.println("Initial set of cookies:");
            List<Cookie> cookies = httpclient.getCookieStore().getCookies();
            if (cookies.isEmpty()) {
                System.out.println("None");
            } else {
                for (Cookie cooky : cookies) {
                    System.out.println("- " + cooky.toString());
                }
            }

            HttpPost httpost = new HttpPost("http://www.articlepub.com/wp-login.php");

            List <NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("log", "***********"));
            nvps.add(new BasicNameValuePair("pwd", "***********"));
            nvps.add(new BasicNameValuePair("rememberme", "forever"));
            nvps.add(new BasicNameValuePair("redirect_to", "http://some-wp-site.com/wp-admin/"));
            nvps.add(new BasicNameValuePair("testcookie", "1"));
            nvps.add(new BasicNameValuePair("wp-submit", "Log In"));


            httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

            response = httpclient.execute(httpost);
            entity = response.getEntity();

            System.out.println("Login form get: " + response.getStatusLine());
            if (entity != null) {
                EntityUtils.consume(entity);
            }

            System.out.println("Post logon cookies:");
            cookies = httpclient.getCookieStore().getCookies();
            if (cookies.isEmpty()) {
                System.out.println("None");
            } else {
                for (Cookie cooky : cookies) {
                    System.out.println("- " + cooky.toString());
                }
            }




            HttpGet httpGet = new HttpGet("http://www.articlepub.com/wp-admin/");
            response = httpclient.execute(httpGet);
            entity = response.getEntity();
            System.out.println("Page Contents: " + EntityUtils.toString(entity));


            System.out.println("Login form get: " + response.getStatusLine());
            if (entity != null) {
                EntityUtils.consume(entity);
            }

            System.out.println("Post get cookies:");
            cookies = httpclient.getCookieStore().getCookies();
            if (cookies.isEmpty()) {
                System.out.println("None");
            } else {
                for (Cookie cooky : cookies) {
                    System.out.println("- " + cooky.toString());
                }
            }




            httpclient.getConnectionManager().shutdown();

        } catch (Exception e) {
            System.out.println(e);

        }

    }

}

1 个答案:

答案 0 :(得分:2)

您需要设置httpclient来处理cookie,例如:

httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);