httpClient4.5.12,获取Cookie

方式一Set-Cookie

package com.httpclient;

import com.util.CommonMethord;
import org.apache.http.*;
import org.apache.http.client.CookieStore;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

// https://my.oschina.net/u/2353992/blog/707973
//https://blog.csdn.net/xiaoxian8023/article/details/50474987
public class TestCookie {


    public static void main(String[] args) {
        loginPost( "http://192.168.31.193:8080/consumer/loginAction.do?method=login",
                "logonname=admin&password=abc123&logindate=2020-07-27&Submit=");
    }


    // 登录
    public static String loginPost(String url, String parameters) {
        // 1 创建请求连接
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionTimeToLive(6000, TimeUnit.MILLISECONDS)
                .build();
        HttpPost httpPost = new HttpPost( url.trim() );
        httpPost.setHeader(new BasicHeader("Content-type", "application/x-www-form-urlencoded"));
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
        // 2 判断参数不为空值时,进行切割
        if (!CommonMethord.isEmpty( parameters )) {
            String[] parameter_array = parameters.split( "&" );
            for (String line : parameter_array) {
                String[] parameter = line.split( "=" );
                if (parameter.length >= 2) {
                    formparams.add( new BasicNameValuePair( parameter[0], parameter[1] ) );
                } else {
                    formparams.add( new BasicNameValuePair( parameter[0], "" ) );
                }
            }
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity( formparams, Consts.UTF_8 ); //对参数进行编码
            httpPost.setEntity( entity );
        }

        // 获取返回对象
        String result = ""; //
        CloseableHttpResponse resp; //返回结果

        try {
            // 发送请求
            resp = httpClient.execute( httpPost );

            // Cookie
            Header[] headers = resp.getHeaders( "Set-Cookie" );
            if(headers != null){
                for(Header header:headers){
                    System.out.println( "========完整值===========" + header.toString());
                    System.out.println( "name==" + header.getName());
                    System.out.println( "value==" + header.getValue());

                }
            }

            // http 状态 200 404 302 500
            StatusLine line = resp.getStatusLine(); //返回带有Cookie
            System.out.println( "状态返回码:" + line );

            // 结果
            HttpEntity httpEntity = resp.getEntity();
            if (httpEntity != null) {
                // 结果转换
                result = EntityUtils.toString( httpEntity, "utf-8" );
//                System.out.println("resp"+ resp.getEntity());
//                System.out.println( result );
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

}

  

方式二 localContext

package com.httpclient;

import com.util.CommonMethord;
import org.apache.http.*;
import org.apache.http.client.CookieStore;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class TestCookie {


    public static void main(String[] args) {
        loginPost( "http://192.168.31.193:8080/consumer/loginAction.do?method=login",
                "logonname=admin&password=abc123&logindate=2020-07-27&Submit=");
    }


    // 登录
    public static String loginPost(String url, String parameters) {
        // 1 创建请求连接
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionTimeToLive(6000, TimeUnit.MILLISECONDS)
                .build();
        HttpPost httpPost = new HttpPost( url.trim() );
        httpPost.setHeader(new BasicHeader("Content-type", "application/x-www-form-urlencoded"));
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
        // 2 判断参数不为空值时,进行切割
        if (!CommonMethord.isEmpty( parameters )) {
            String[] parameter_array = parameters.split( "&" );
            for (String line : parameter_array) {
                String[] parameter = line.split( "=" );
                if (parameter.length >= 2) {
                    formparams.add( new BasicNameValuePair( parameter[0], parameter[1] ) );
                } else {
                    formparams.add( new BasicNameValuePair( parameter[0], "" ) );
                }
            }
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity( formparams, Consts.UTF_8 ); //对参数进行编码
            httpPost.setEntity( entity );
        }

        // 获取返回对象
        String result = ""; //
        CloseableHttpResponse resp; //返回结果

        try {
            // 发送请求
            HttpClientContext localContext = HttpClientContext.create();
            resp = httpClient.execute( httpPost,localContext );

            // Cookie
            List<Cookie> cookies = localContext.getCookieStore().getCookies();

            for(int i= 0; i<cookies.size();i++){
                if (cookies.get( i ).getName().equals( "JSESSIONID" )){
                    String JSESSIONID = cookies.get( i ).getValue();
                }
                System.out.println( "========完整值===========" + cookies.get( i ));
                System.out.println( "name==" + cookies.get( i ).getName());
                System.out.println( "value==" + cookies.get( i ).getValue());
                System.out.println( "domain==" + cookies.get( i ).getDomain());
                System.out.println( "path==" + cookies.get( i ).getPath());
            }



            // http 状态 200 404 302 500
            StatusLine line = resp.getStatusLine(); //返回带有Cookie
            System.out.println( "状态返回码:" + line );

            // 结果
            HttpEntity httpEntity = resp.getEntity();
            if (httpEntity != null) {
                // 结果转换
                result = EntityUtils.toString( httpEntity, "utf-8" );
//                System.out.println("resp"+ resp.getEntity());
//                System.out.println( result );
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

}



原文地址:https://www.cnblogs.com/Alexr/p/13397171.html