HttpClient登陆后获取并携带cookies发起请求
最近项目中,用到了登陆后获取并携带cookies发起请求的业务场景,现总结写出来备忘一下。
1.定义存取cookies信息的全局变量
- public class HttpUtil {
- /**
- * 用来存取cookies信息的变量.
- */
- private static CookieStore cookieStore;
2.登陆后获取cookies信息存储到全局变量
- public class HttpUtil {
- /**
- *
- * @param httpUrl
- * 地址
- * @param paramMap
- * 参数
- *
- */
- public static String loginPost(String httpUrl, Map<String, Object> paramMap) throws Exception {
- if (log.isInfoEnabled()) {
- log.info("请求httpUrl=" + httpUrl);
- log.info("请求params=" + JSONObject.toJSONString(paramMap));
- }
- // 创建httpPost
- HttpPost httpPost = new HttpPost(httpUrl);
- // 设置参数
- List<NameValuePair> params = new ArrayList<>();
- if (paramMap != null && paramMap.size() > 0) {
- Set<String> keySet = paramMap.keySet();
- for (String key : keySet) {
- params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key))));
- }
- httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
- }
- String response;
- DefaultHttpClient httpClient = null;
- try {
- httpClient = new DefaultHttpClient();
- String contentCharset = CoreProtocolPNames.HTTP_CONTENT_CHARSET;
- String soTimeOut = CoreConnectionPNames.SO_TIMEOUT;
- String connectTimeOut = CoreConnectionPNames.CONNECTION_TIMEOUT;
- httpClient.getParams().setParameter(contentCharset, "utf-8");
- httpClient.getParams().setParameter(soTimeOut, 60000);
- httpClient.getParams().setParameter(connectTimeOut, 60000);
- HttpResponse httpResponse = httpClient.execute(httpPost);
- // 获得返回结果
- response = EntityUtils.toString(httpResponse.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET);
- // 获得cookie并存取
- this.cookieStore = httpClient.getCookieStore();
- List<Cookie> cookieList = this.cookieStore.getCookies();
- for (Cookie cookie : cookieList){
- String name =cookie.getName();
- String value = cookie.getValue();
- log.info("登陆成功,cookie name = " + name + ", cookie value = " + value);
- }
- if (log.isInfoEnabled()) {
- log.info("响应内容=" + response);
- }
- return response;
- } catch (Exception e) {
- log.error("HttpPost请求失败:" + e.getMessage(), e);
- throw new RuntimeException("HttpPost请求失败:" + e.getMessage(), e);
- } finally {
- if (null != httpClient) {
- httpClient.getConnectionManager().shutdown();
- }
- }
- }
3.携带cookie发送业务请求
- public class HttpUtil {
- /**
- *
- * @param url 请求地址
- * @param paramMap 请求内容
- * @return 响应内容
- * @throws Exception
- */
- public static String requestPostWithCookie(String url, Map<String, Object> paramMap) throws Exception {
- if (log.isInfoEnabled()) {
- log.info("post请求地址:" + url);
- log.info("post请求内容:" + paramMap);
- }
- long beginTime = System.currentTimeMillis();
- try {
- HttpClient httpClient = HttpClients.custom().setDefaultCookieStore(this.cookieStore).build();
- HttpPost httpPost = new HttpPost(url);
- // 设置参数
- List<NameValuePair> params = new ArrayList<>();
- if (paramMap != null && paramMap.size() > 0) {
- Set<String> keySet = paramMap.keySet();
- for (String key : keySet) {
- params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key))));
- }
- httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
- }
- // 设置请求和传输超时时间
- RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build();
- httpPost.setConfig(requestConfig);
- // 发起请求
- HttpResponse response = httpClient.execute(httpPost);
- // 获取响应数据并转换成JSON
- String resString = EntityUtils.toString(response.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET);
- log.info("post响应内容: " + resString);
- return resString;
- } catch (Exception e) {
- log.error("请求失败:" + e.getMessage(), e);
- throw e;
- } finally {
- log.info("结束post请求,耗时(ms):" + (System.currentTimeMillis() - beginTime));
- }
- }
4.完整示例代码
- package com.zat.ucop.bus.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.zat.ucop.service.util.UcopCommonUtil;
- import com.zat.ucop.service.util.UcopUtils;
- import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.CookieStore;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.config.RequestConfig;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.cookie.Cookie;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.params.CoreConnectionPNames;
- import org.apache.http.params.CoreProtocolPNames;
- import org.apache.http.util.EntityUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- public class HttpUtil {
- private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
- /**
- * 用来存取cookies信息的变量.
- */
- private static CookieStore cookieStore;
- /**
- *
- * @param httpUrl
- * 地址
- * @param paramMap
- * 参数
- *
- */
- public static String loginPost(String httpUrl, Map<String, Object> paramMap) throws Exception {
- if (log.isInfoEnabled()) {
- log.info("请求httpUrl=" + httpUrl);
- log.info("请求params=" + JSONObject.toJSONString(paramMap));
- }
- // 创建httpPost
- HttpPost httpPost = new HttpPost(httpUrl);
- // 设置参数
- List<NameValuePair> params = new ArrayList<>();
- if (paramMap != null && paramMap.size() > 0) {
- Set<String> keySet = paramMap.keySet();
- for (String key : keySet) {
- params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key))));
- }
- httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
- }
- String response;
- DefaultHttpClient httpClient = null;
- try {
- httpClient = new DefaultHttpClient();
- String contentCharset = CoreProtocolPNames.HTTP_CONTENT_CHARSET;
- String soTimeOut = CoreConnectionPNames.SO_TIMEOUT;
- String connectTimeOut = CoreConnectionPNames.CONNECTION_TIMEOUT;
- httpClient.getParams().setParameter(contentCharset, "utf-8");
- httpClient.getParams().setParameter(soTimeOut, 60000);
- httpClient.getParams().setParameter(connectTimeOut, 60000);
- HttpResponse httpResponse = httpClient.execute(httpPost);
- // 获得返回结果
- response = EntityUtils.toString(httpResponse.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET);
- // 获得cookie并存取
- cookieStore = httpClient.getCookieStore();
- List<Cookie> cookieList = cookieStore.getCookies();
- for (Cookie cookie : cookieList){
- String name =cookie.getName();
- String value = cookie.getValue();
- log.info("登陆成功,cookie name = " + name + ", cookie value = " + value);
- }
- if (log.isInfoEnabled()) {
- log.info("响应内容=" + response);
- }
- return response;
- } catch (Exception e) {
- log.error("HttpPost请求失败:" + e.getMessage(), e);
- throw new RuntimeException("HttpPost请求失败:" + e.getMessage(), e);
- } finally {
- if (null != httpClient) {
- httpClient.getConnectionManager().shutdown();
- }
- }
- }
- /**
- *
- * @param url 请求地址
- * @param paramMap 请求内容
- * @return 响应内容
- * @throws Exception
- */
- public static String requestPostWithCookie(String url, Map<String, Object> paramMap) throws Exception {
- if (log.isInfoEnabled()) {
- log.info("post请求地址:" + url);
- log.info("post请求内容:" + paramMap);
- }
- long beginTime = System.currentTimeMillis();
- try {
- HttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
- HttpPost httpPost = new HttpPost(url);
- // 设置参数
- List<NameValuePair> params = new ArrayList<>();
- if (paramMap != null && paramMap.size() > 0) {
- Set<String> keySet = paramMap.keySet();
- for (String key : keySet) {
- params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key))));
- }
- httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
- }
- // 设置请求和传输超时时间
- RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build();
- httpPost.setConfig(requestConfig);
- // 发起请求
- HttpResponse response = httpClient.execute(httpPost);
- // 获取响应数据并转换成JSON
- String resString = EntityUtils.toString(response.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET);
- log.info("post响应内容: " + resString);
- return resString;
- } catch (Exception e) {
- log.error("请求失败:" + e.getMessage(), e);
- throw e;
- } finally {
- log.info("结束post请求,耗时(ms):" + (System.currentTimeMillis() - beginTime));
- }
- }
- }
补充:HttpClient获取Cookie的两种方式
1.使用DefaultHttpClient类实例化httpClient对象:
- package com.zat.ucop.bus.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.zat.ucop.service.util.UcopCommonUtil;
- import com.zat.ucop.service.util.UcopUtils;
- import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.CookieStore;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.config.RequestConfig;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.cookie.Cookie;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.params.CoreConnectionPNames;
- import org.apache.http.params.CoreProtocolPNames;
- import org.apache.http.util.EntityUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- public class HttpUtil {
- private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
- /**
- * 用来存取cookies信息的变量.
- */
- private static CookieStore cookieStore;
- /**
- *
- * @param httpUrl
- * 地址
- * @param paramMap
- * 参数
- *
- */
- public static String loginPost(String httpUrl, Map<String, Object> paramMap) throws Exception {
- if (log.isInfoEnabled()) {
- log.info("请求httpUrl=" + httpUrl);
- log.info("请求params=" + JSONObject.toJSONString(paramMap));
- }
- // 创建httpPost
- HttpPost httpPost = new HttpPost(httpUrl);
- // 设置参数
- List<NameValuePair> params = new ArrayList<>();
- if (paramMap != null && paramMap.size() > 0) {
- Set<String> keySet = paramMap.keySet();
- for (String key : keySet) {
- params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key))));
- }
- httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
- }
- String response;
- DefaultHttpClient httpClient = null;
- try {
- httpClient = new DefaultHttpClient();
- String contentCharset = CoreProtocolPNames.HTTP_CONTENT_CHARSET;
- String soTimeOut = CoreConnectionPNames.SO_TIMEOUT;
- String connectTimeOut = CoreConnectionPNames.CONNECTION_TIMEOUT;
- httpClient.getParams().setParameter(contentCharset, "utf-8");
- httpClient.getParams().setParameter(soTimeOut, 60000);
- httpClient.getParams().setParameter(connectTimeOut, 60000);
- HttpResponse httpResponse = httpClient.execute(httpPost);
- // 获得返回结果
- response = EntityUtils.toString(httpResponse.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET);
- // 获得cookie并存取
- 82 cookieStore = httpClient.getCookieStore();
- 83 List<Cookie> cookieList = cookieStore.getCookies();
- 84 for (Cookie cookie : cookieList){
- 85 String name =cookie.getName();
- 86 String value = cookie.getValue();
- 87 log.info("登陆成功,cookie name = " + name + ", cookie value = " + value);
- 88 }
- if (log.isInfoEnabled()) {
- log.info("响应内容=" + response);
- }
- return response;
- } catch (Exception e) {
- log.error("HttpPost请求失败:" + e.getMessage(), e);
- throw new RuntimeException("HttpPost请求失败:" + e.getMessage(), e);
- } finally {
- if (null != httpClient) {
- httpClient.getConnectionManager().shutdown();
- }
- }
- }
- }
2.使用CloseableHttpClient类实例化httpClient对象:
- package com.zat.ucop.bus.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.zat.ucop.service.util.UcopCommonUtil;
- import com.zat.ucop.service.util.UcopUtils;
- import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.CookieStore;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.config.RequestConfig;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.cookie.Cookie;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.params.CoreConnectionPNames;
- import org.apache.http.params.CoreProtocolPNames;
- import org.apache.http.util.EntityUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- public class HttpUtil {
- private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
- /**
- * 用来存取cookies信息的变量.
- */
- private static CookieStore cookieStore;
- /**
- *
- * @param url 请求地址
- * @param paramMap 请求内容
- * @return 响应内容
- * @throws Exception
- */
- public static String requestPostWithCookie(String url, Map<String, Object> paramMap) throws Exception {
- if (log.isInfoEnabled()) {
- log.info("post请求地址:" + url);
- log.info("post请求内容:" + paramMap);
- }
- long beginTime = System.currentTimeMillis();
- try {
- CookieStore cookieStore = new BasicCookieStore();
- HttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
- HttpPost httpPost = new HttpPost(url);
- // 设置参数
- List<NameValuePair> params = new ArrayList<>();
- if (paramMap != null && paramMap.size() > 0) {
- Set<String> keySet = paramMap.keySet();
- for (String key : keySet) {
- params.add(new BasicNameValuePair(key, UcopCommonUtil.convertString(paramMap.get(key))));
- }
- httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
- }
- // 设置请求和传输超时时间
- RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(120000).setConnectTimeout(120000).build();
- httpPost.setConfig(requestConfig);
- // 发起请求
- HttpResponse response = httpClient.execute(httpPost);
- 74 List<Cookie> cookieList = cookieStore.getCookies();
- 75 for (Cookie cookie : cookieList){
- 76 String name =cookie.getName();
- 77 String value = cookie.getValue();
- 78 log.info("cookie name = " + name + ", cookie value = " + value);
- 79 }
- // 获取响应数据并转换成JSON
- String resString = EntityUtils.toString(response.getEntity(), UcopUtils.UCOP_DEFAULT_CHARSET);
- log.info("post响应内容: " + resString);
- return resString;
- } catch (Exception e) {
- log.error("请求失败:" + e.getMessage(), e);
- throw e;
- } finally {
- log.info("结束post请求,耗时(ms):" + (System.currentTimeMillis() - beginTime));
- }
- }
- }
HttpClient登陆后获取并携带cookies发起请求的更多相关文章
- 轻松把玩HttpClient之封装HttpClient工具类(五),携带Cookie的请求
近期更新了一下HttpClientUtil工具类代码,主要是加入了一个參数HttpContext,这个是用来干嘛的呢?事实上是用来保存和传递Cookie所须要的. 由于我们有非常多时候都须要登录.然后 ...
- python接口自动化测试——简单的文件上传代码实现,人人网登陆后上传图片举例
import requests '''人人网登陆,图片上传 '''def loginData(): '''登录请求参数''' data = { 'email': '13484545195', 'ico ...
- python接口自动化测试七:获取登录的Cookies,并关联到下一个请求
获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cookies=loginCookies 此方法需每一次都调用登录方法,并且每一次发送请求 ...
- python接口自动化测试七:获取登录的Cookies
python接口自动化测试七:获取登录的Cookies,并关联到下一个请求 获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...
- Node.js:实现知乎(www.zhihu.com)模拟登陆,获取用户关注主题
前一段时间,在瞎看看 Node.js,便研究通过 Node.js 实现知乎模拟登陆.相信,有很多网站有登陆权限设置,如若用户未登陆,将会跳转至首页提醒用户登陆,无法浏览部分页面. 如若是 b/s 架构 ...
- (26)基于cookie的登陆认证(写入cookie、删除cookie、登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面、使用装饰器完成所有页面的登陆认证)
获取cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age ...
- 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies
第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...
- 十二 web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies
模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里 ...
- 记一次HTTPClient模拟登录获取Cookie的开发历程
记一次HTTPClient模拟登录获取Cookie的开发历程 环境: springboot : 2.7 jdk: 1.8 httpClient : 4.5.13 设计方案 通过新建一个 ...
随机推荐
- 【转】jvm 堆内存 栈内存 大小设置
原文地址:http://blog.csdn.net/qh_java/article/details/46608395 4种方式配置不同作用域的jvm的堆栈内存! 1.Eclise 中设置jvm内存: ...
- vCenter Server Heartbeat
1.简介 vCenter Server Heartbeat为VMware vCenter Server提供关键任务高可用性,保护虚拟基础架构免受硬件.网络.配置等的影响,基于Windows的服务,可为 ...
- 敏捷软件开发:原则、模式与实践——第11章 DIP:依赖倒置原则
第11章 DIP:依赖倒置原则 DIP:依赖倒置原则: a.高层模块不应该依赖于低层模块.二者都应该依赖于抽象. b.抽象不应该依赖于细节.细节应该依赖于抽象. 11.1 层次化 下图展示了一个简单的 ...
- CSS中的三种基本的定位机制(普通流、定位、浮动)
一.普通流 普通流中元素框的位置由元素在XHTML中的位置决定.块级元素从上到下依次排列,框之间的垂直距离由框的垂直margin计算得到.行内元素在一行中水平布置. 普通流就是html文档中的元素如块 ...
- python读取pop3服务器邮件并且下载
# -*- coding: cp936 -*- import poplib import random import os def getmail(): # 蒋辉文拥有该程序权利 你可以随意使用 em ...
- 2.5 《硬啃设计模式》第7章 车手选车 - 生成器(Builder Pattern)
某赛车游戏,玩家可以选择不同的车,这些车其实是采用不同性能的配件组成的,如:车胎.发动机等. 玩家选择一部车,其实就是new了一部车. 你如何考虑“new car”的代码? 要new这个车,可能需要先 ...
- Python之set集合与collections系列
1>set集合:是一个无序且不重复的元素集合:访问速度快,解决了重复的问题: s2 = set(["che","liu","haha" ...
- 1、Semantic-UI之开发环境搭建
下载webstrom(其他的任何可以进行前端开发的软件都可以) Download WebStorm: The Smartest JavaScript IDE by JetBrains 安装并激活web ...
- Android-SDCard外部存储文件读写
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses ...
- EDM模板制作规范
为了保证最大的兼容性,在制作HTML的email页面时,请严格按照规范来书写: 1.页面宽度推荐500px,最大不要超过750px: 2.制作HTML的email页面时,不使用css+div来布局,最 ...