HTTPClient实现免登陆请求(带cookie请求)
背景:
使用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请求)的更多相关文章
- 带cookie请求数据
经常会用到一些采集网上的资源,普通网站很好采,get_file_contents()/c_url(). 有的网站会有登陆后才能采集,需要带cookie请求获取(登陆网站相同方法),下面记录一下使用方法 ...
- 利用postman进行接口测试并发送带cookie请求的方法
做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...
- postman 请求带cookie
以亚马逊为例,我抓包随便看一个返回是json数据格式的一个接口,比如随便点一个,我的订单 随便找一条,然后复制url过滤 右键,copy下url 将url放入filter过滤: 在postman里面, ...
- C# 跨域 请求带cookie
原文:https://blog.csdn.net/z69183787/article/details/78954325 背景: 别个的项目,要开发App接口,要求用前端AJAX的方式访问接口数据. 后 ...
- 如何实现免登陆功能(cookie session?)
Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...
- Spring Cloud系列之客户端请求带“Authorization”请求头,经过zuul转发后丢失了
先摆解决方案: 方法一: 方法二: zuul.routes.<routeName>.sensitive-headers= zuul.routes.<routeName>.cus ...
- okhttp3带cookie请求
Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一.就像下面这样: Request request = new Request. ...
- python请求带cookie
先获得cookie到文件 import cookielib import urllib2 #设置保存cookie的文件,同级目录下的cookie.txt filename = 'cookie.txt' ...
- ajax跨域请求带cookie
调用网站:a.xxx.com jQuery(document).ready(function () { $.ajax({ type: "get", async: true, url ...
随机推荐
- Hibernate5笔记9--Hibernate注解式开发
Hibernate注解式开发: (1)注解式开发的注意点: Hibernate中使用注解,主要是为了替代映射文件,完成“类到表,属性到字段”的映射. JPA提供了一套功能强大的注解.Hibernat ...
- vue中使用cookie记住用户上次选择(本次例子中为下拉框)
最近工作中碰到一个需求,添加一条数据时,自动记住上次选择的下拉框的数据,刚开始觉得没思路,后来请教了项目组长,组长直接一句,这不很简单吧,直接用cookie,我:....... 好吧,都王的差不多了, ...
- RW RO ZI ROM keil中的含义
编译的一个ARM的程序,会得到这样的信息: ============================================================================== ...
- structc 开源框架介绍
引言 - 一切才刚刚开始 structc 是 C 结构基础库. 简单可复用. structc - https://github.com/wangzhione/structc 之前也描述过几次 stru ...
- CentOS7 修改网卡名称
vi /etc/sysconfig/grub 增加net.ifnames=0 biosdevname=0 执行:grub2-mkconfig -o /boot/grub2/grub.cfg
- python基础学习之路No.1
版本python2 python语言不分"和',两者可以一样使用,同等效果 1.输出print python3中print是一个函数 print "hello world" ...
- UFLDL 教程学习笔记(三)
教程地址:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/ logstic regression是二分类的问题,如果想要 ...
- [java笔记]动态数组
private int count;//计数器 private int ary[] = new int [3]; if(count >= ary.length){ //数组动态扩展 int ne ...
- PHP5.6中php-fpm的配置、启动、关闭和重启
转:http://blog.csdn.net/field_yang/article/details/52401994 该文主要讲述:如何配置PHP-fpm.常见报错解决方法和php-fpm的启动.关闭 ...
- CCF CSP 201709-4 通信网络
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...