方式一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; } }