java - HttpClient - 登录,然后丢失 cookie

标签 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);

        }

    }

}

最佳答案

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

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

关于java - HttpClient - 登录,然后丢失 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547639/

相关文章:

java - HTTPClient MultipartEntity 似乎正在向 StringBody 部分添加垃圾文本

string - 获取互联网上文​​本文件的内容, flutter 朔迷离

Java arraylist转数组、数组转字符串错误

java - 有没有办法在 Android 应用程序(Java)中播放 Twitch Streams

java - Spring Data Jpa - 扫描测试文件夹中的文件

java - InternalHttpClient.getParams() 与 UnsupportedOperationException

java - 美国公司(JAVA) : Algorithms Complete Search

java - 创建一个随机圆圈,可以像按钮一样单击,但它是一个圆圈

c# - 为什么我看不到内容编码 : gzip response in my c# HttpClient response header?

java - HttpClient 4.3 更改了参数(查询)处理?