第一篇  httpclient获取和设置cookie

public static void main(String[] args) {
    CookieStore cookieStore = new BasicCookieStore();
    CloseableHttpClient httpClient = HttpClients.custom()
            .setDefaultCookieStore(cookieStore)
            .build();
    try {
        HttpPost post = new HttpPost("http://www.baiduc.com");
        BasicClientCookie cookie = new BasicClientCookie("name", "zhaoke");
        cookie.setVersion(0);
        cookie.setDomain("/pms/");   //设置范围
        cookie.setPath("/");
        cookieStore.addCookie(cookie);
        httpClient.execute(post);//
        List<Cookie> cookies = cookieStore.getCookies();
        for (int i = 0; i < cookies.size(); i++) {
            System.out.println("Local cookie: " + cookies.get(i));
    } catch (Exception e) {
        e.printStackTrace();
    }finally{

第二篇  CloseableHttpClient学习笔记(获取cookies+携带获取的cookies访问post接口)

注意: 本文的分享是基于https://blog.csdn.net/lt326030434/article/details/80453690,感谢原作者的分享~
分享这篇博客是因为原博客里的DefaultHttpClient is deprecated(httpclient4.3以后),所以此处是一个修改过后的方法,供大家参考.

1.首先配置好测试用的mock接口


在这里插入图片描述在这里插入图片描述我们要做的是从/getcookies接口中获取”login”:”true”的cookies信息,然后携带该信息去访问/post/with/cookies2接口

2.全局变量配置url信息

3. 代码实现


package com.gracie.httpclient.cookies;

import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.entity.StringEntity;
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.util.EntityUtils;
import org.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;

public class MyCookiesForPost {

private  String url;
private ResourceBundle bundle;
//用来存储cookies信息的变量
private CookieStore store;
@BeforeTest
public void beforeTest(){
    bundle=ResourceBundle.getBundle("application", Locale.CHINA);
    url=bundle.getString("test.url");

// 获取cookies的信息

@Test
public void testGetcookies() throws IOException {
    String result;
    //从配置文件中拼接测试的URL
    String uri=bundle.getString("getCookies.uri");
    String testUrl=this.url+uri;
    // 获取cookies信息
    this.store= new BasicCookieStore();
    CloseableHttpClient httpclient = HttpClients.custom().setDefaultCookieStore(store).build();
    //测试逻辑
    HttpGet httpget=new HttpGet(testUrl);
    CloseableHttpResponse response2 = httpclient.execute(httpget);
    //打印返回值
    result = EntityUtils.toString(response2.getEntity());
    System.out.println(result);
    //读取cookie信息
    List<Cookie> cookielist = store.getCookies();
    for(Cookie cookie: cookielist){
        String name=cookie.getName();
        String value=cookie.getValue();
        System.out.println("cookie name =" + name);
        System.out.println("Cookie value=" + value);

// 使用post方法

@Test(dependsOnMethods = {"testGetcookies"})
public void testPostMethod() throws IOException {
    String uri=bundle.getString("test.post.with.cookies");
    //拼接最终的测试地址
    String testUrl=this.url+uri;
     //声明一个post的方法
    HttpPost httppost=new HttpPost(testUrl);
    //添加参数
    JSONObject param = new JSONObject();
    param.put("name","huhansan");
    param.put("age","18");
    //设置请求头信息,设置header
    httppost.setHeader("content-type", "application/json");
    //将参数信息添加到方法中
    StringEntity entity = new StringEntity(param.toString(), "utf-8");
    httppost.setEntity(entity);
    //声明一个client对象,用来进行方法的执行,并设置cookies信息
    CloseableHttpClient httpclient = HttpClients.custom().setDefaultCookieStore(this.store).build();
    //执行post的方法并得到响应结果
    CloseableHttpResponse response3 = httpclient.execute(httppost);
    //就是判断返回结果是否符合预期
    int statusCode = response3.getStatusLine().getStatusCode();
    System.out.println("statusCode = "+ statusCode);
    String result=EntityUtils.toString(response3.getEntity(),"utf-8");;
    if (statusCode==200){
        System.out.println(result);
    } else {
        System.out.println("访问/get/with/cookies接口失败");
    //将返回的响应结果字符串转化为json对象
    JSONObject resultjson = new JSONObject(result);
    //获取到结果值
    String success = (String) resultjson.get("huhansan");
    System.out.println(success);
    Assert.assertEquals("success", success);


4. 获得结果

1.HTTP cookie Cookie 是 HTTP 代理和目标服务器可以交流保持会话的状态信息的令牌或小的数据包。网景公司的工程师把它称为“魔法小甜饼”("magic cookie"),这个名字好像有粘性一样。 HttpClient 使用 Cookie 接口来代表抽象的 cookie 令牌。 HTTP中简单形式中的cookie是名/值对。 通常一个 HTTP 的 cookie 也包含一些属... 在使用HttpClient进行抓取一些网页的时候,经常会保留从服务器端发回的Cookie信息,以便发起其他需要这些Cookie的请求。大多数情况下,我们使用内置的cookie策略,便能够方便直接地获取这些cookie。 下面的一小段代码,就是访问http://www.baidu.com,并获取对应的cookieHttpClient支持自动管理Cookies,允许服务端设定Cookies,并在请求时自动返回客户端的Cookies信息。客户端也可以手动的设置Cookies发送到服务端。 不幸的是,同一时间内有太多的Cookies标准: Netscape Cookie, RFC2109, RFC2965 以及大量供应商不符合规范的自定义Cookie 读者定位为具有 Java 和 Web 开发经验的开发和设计人员。读者可以学习到关于 Cookie 的工作原理和 Cookie 协议的细节,以及在一个 HTTP 应用代理的场景下 Cookie 的管理和处理思想,并可以直接使用文中的代码和思路,提高工作效率。随着越来越多的系统移植到了 Web 上,HTTP 协议具有了比以前更广泛的应用。不同的系统对 WEB 实现提出了不同的要求,基于 HTTP 协议... COOKIE的处理 session的保持是通过cookie来维持的,所以如果用户有勾选X天免登陆,这个session就X天内一直有效,就是通过这个cookie来维持。 如果没有选中x天免登陆,基本上就是本次才能保持session,下次打开浏览器就要重新登陆了。所以在web安全里,黑客通过XSS,最终目的就是获取cookie,从免登陆直接进入系统 这次要讲的是得到用户cookie后,免登陆,用htt... 转载自AndyWei123的博客 首先是模拟登录,一般在一些防爬网站需要携带一些基础http头模拟成浏览器登录,一般只需要User-agent使用火狐浏览器,这里就不涉及了,登录通常是把用户名和密码加密发送给后台,当服务器收到HTTP请求时,服务器可以在响应头里面添加一个Set-Cookie选项。浏览器收到响应后通常会保存下Cookie,之后对该服务器每一次请求中都通过Cookie请求头... 10-30 16:38:05.898: W/HttpMethodBase(14634): Cookie rejected: "$Version="1"; BAIDUID="xxxx"; $Path="/"; $Domain=".baidu.com"". Domain attribute ".baidu.com" violates RFC 2109: host minus domain m 第一种handler.UseCookies=true(默认为true),默认的会自己带上cookies,例如 var handler = new HttpClientHandler() { UseCookies = true }; var client = new HttpClient(handler);// { BaseAddress = baseAddress }; ... &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&gt; &lt;version&gt;4.5.6&lt;/version&gt; CookieSpec cookiespec = CookiePolicy.getDefaultSpec(); Cookie[] cookies=cookiespec.match("域名",80,"/",false ,httpclient.getState().getCookies()); for(Cookie cookie:cookies)  System.out.println(cooki /设置代理IP,设置连接超时时间、设置请求读取数据的超时时间、设置从connectManager获取Connection超时时间、2.httpclient浏览器级别代理,相当于把浏览器设置一个全局ip代理,所有访问默认全是ip代理。1.在请求时设置代理。优点是自由,哪个访问用代理哪个访问不用可以随意控制。......