背景:

使用httpClient请求某登录型网站,模拟一个操作,一般步骤一个httpclient模式登录-》httpClient模拟操作;

此时发现,每次操作都需要进行一次登录,极其浪费时间,是否可以通过某一方式进行一次登录多次操作,这里提供一种方式,带cookie登录。

登录获取cookie:

    public String loginModel(String username, String password) {
String JSESSIONID = null;
HttpPost httppost = new HttpPost(url);//httppost
try {
List<NameValuePair> para = new ArrayList<NameValuePair>();
para.add(new BasicNameValuePair("password", password));
para.add(new BasicNameValuePair("username", username));//构造表单
httppost.setHeader(
"User-Agent",
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36");
httppost.setEntity(new UrlEncodedFormEntity(para, "utf-8"));//设置请求体
BasicCookieStore cookieStore = new BasicCookieStore();//建立一个CookieStore
CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();//建立带cookie的httpClient
int statuts_codes = httpClient.execute(httppost).getStatusLine().getStatusCode();//发送请求,发送成功后cookie将存在于cookieStore中
if (statuts_codes == HttpStatus.SC_OK) {//请求成功
List<Cookie> cookies = cookieStore.getCookies();//遍历获取需要的值
for (int i = ; i < cookies.size(); i++) {//获取JSESSIONID
if (cookies.get(i).getName().equals("id")) {
JSESSIONID = cookies.get(i).getValue();
}
}
cookieMap.put("JSESSIONID", JSESSIONID); } else {//请求失败 }
} catch (UnsupportedEncodingException ex) { } catch (IOException ex) { } finally {
httppost.releaseConnection();//释放资源
}
return cookieMap.get("JSESSIONID");
}

创建带有cookie的HttpClient

 public CloseableHttpClient getHttpClients(String username, String password) {
BasicCookieStore cookieStore = new BasicCookieStore();
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
String JSESSIONID = loginModel(username, password);
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", JSESSIONID);
cookie.setVersion(0);
String domain = Constant.HOOK_URL.substring(0, Constant.HOOK_URL.indexOf(":"));
if (Constant.HOOK_URL.startsWith("http://")) {
domain = Constant.HOOK_URL.substring(Constant.HOOK_URL.lastIndexOf("/") + 1, Constant.HOOK_URL.lastIndexOf(":"));
}
cookie.setDomain(domain);
cookie.setPath(Constant.HOOK_FW);
cookieStore.addCookie(cookie);
//带有cookie的httpclient
return httpClientBuilder.setDefaultCookieStore(cookieStore).build();
}

使用:

public void useCookieHttpClient() {

        CloseableHttpClient httpClient = getHttpClients(user, pass);
HttpPost httppost = new HttpPost(url2);
List<NameValuePair> para = new ArrayList<>();//表单
para.add("键", "值");
httppost.setEntity(new UrlEncodedFormEntity(para, "utf-8"));
httppost.setEntity(new UrlEncodedFormEntity(para, "utf-8"));
CloseableHttpResponse res = httpClient.execute(httppost);
int statuts_codes = res.getStatusLine().getStatusCode();
if (statuts_codes == HttpStatus.SC_OK) {//请求成功
String result = EntityUtils.toString(res.getEntity(), "utf-8");//返回值
} }

HTTPClient实现免登陆请求(带cookie请求)的更多相关文章

  1. 带cookie请求数据

    经常会用到一些采集网上的资源,普通网站很好采,get_file_contents()/c_url(). 有的网站会有登陆后才能采集,需要带cookie请求获取(登陆网站相同方法),下面记录一下使用方法 ...

  2. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  3. postman 请求带cookie

    以亚马逊为例,我抓包随便看一个返回是json数据格式的一个接口,比如随便点一个,我的订单 随便找一条,然后复制url过滤 右键,copy下url 将url放入filter过滤: 在postman里面, ...

  4. C# 跨域 请求带cookie

    原文:https://blog.csdn.net/z69183787/article/details/78954325 背景: 别个的项目,要开发App接口,要求用前端AJAX的方式访问接口数据. 后 ...

  5. 如何实现免登陆功能(cookie session?)

    Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...

  6. Spring Cloud系列之客户端请求带“Authorization”请求头,经过zuul转发后丢失了

    先摆解决方案: 方法一: 方法二: zuul.routes.<routeName>.sensitive-headers= zuul.routes.<routeName>.cus ...

  7. okhttp3带cookie请求

    Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一.就像下面这样: Request request = new Request. ...

  8. python请求带cookie

    先获得cookie到文件 import cookielib import urllib2 #设置保存cookie的文件,同级目录下的cookie.txt filename = 'cookie.txt' ...

  9. ajax跨域请求带cookie

    调用网站:a.xxx.com jQuery(document).ready(function () { $.ajax({ type: "get", async: true, url ...

随机推荐

  1. vue写出放大镜的效果

    用vue写出放大镜查看图片的效果. 安装 npm install vue2.0-zoom 引入 import imgZoom from 'vue2.0-zoom' 组件 components: { i ...

  2. 聊天室(下篇)GatewayWorker 与 Laravel 的整合

    思路 上一篇大概梳理了一下 GatewayWorker 的基础知识.这篇就来准备整合 GatewayWorker 到 Laravel. GatewayWorker 是基于 Socket 监听的服务器框 ...

  3. Callable和futrue、ExecutorService的用法

    首先说明是为了解决什么问题? 为了解决主线程无谓等待浪费服务器资源的问题.当主线程执行一个费时的操作时,比如客户端发起一个请求,该请求在服务器端处理很复杂,如需要调用其他系统的接口,总之比较耗时.这时 ...

  4. hibernate学习之一 框架配置

    hibernate 框架 1.hibernate框架应用在javaee三层结构中的dao层框架 2.好处就是不需要写复杂jdbc代码,不需要sql语句实现 3.是开源的轻量级框架 hibernate使 ...

  5. Mac上删除不了的文件,Windows上也粉碎不了怎么办?

    推荐一个Mac上的软件:Tuxera Disk Manager 用法很简单:选择删除文件原来所在的文件进行维护就可以了. 维护之后,在废纸篓中清除,成功.

  6. Python基础:获取平台相关信息

    Windows 10家庭中文版,Python 3.6.4, 本文介绍了使用os.platform.sys三个模块获取Python程序的运行平台相关的信息. os模块:提供 各种各样的操作系统接口 os ...

  7. python基础--json,pickle和shelve模块

    一.JSON &pickle 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换  字符串必须是双引号,不能是单引号 pickle,用于python特有的类型 和 ...

  8. An overview of gradient descent optimization algorithms (更新到Adam)

    Momentum:解快了收敛速度,同时也减弱了SGD的波动 NAG: 减速了Momentum更新参数太快 Adagrad: 出现频率较低参数采用较大的更新,对于出现频率较高的参数采用较小的,不共用一个 ...

  9. 转58同城 mysql规范

    这里面都是一些很简单的规则,看似没有特别大的意义,但真实的不就是这么简单繁杂的工作吗? 军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 ( ...

  10. pytest的参数化测试

    感觉在单元测试当中可能有用, 但在django这种框架中,用途另一说. import pytest import tasks from tasks import Task def test_add_1 ...