使用cookies保持会话自己研究了下应该有两种方式:

1.保持会话的第一种方法:如果用的是同一个HttpClient且没去手动连接放掉client.getConnectionManager().shutdown(); 都不用去设置cookie的ClientPNames.COOKIE_POLICY。httpclient都是会保留cookie的

package com.wq;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.NameValuePair;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; /**
* 保持会话的第一种方法:如果用的是同一个HttpClient且没去手动连接放掉client.getConnectionManager().shutdown();
* 都不用去设置cookie的ClientPNames.COOKIE_POLICY。httpclient都是会保留cookie的
* @author Redick
* @data 2017/4/24
*/ public class CookieManage { public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, List<NameValuePair>> loginMap = new HashMap<String, List<NameValuePair>>();
List<NameValuePair> loginList = new ArrayList<NameValuePair>();
loginList.add(new BasicNameValuePair("username","yuechunhua"));
loginList.add(new BasicNameValuePair("password","111111"));
loginMap.put("http://eac.mgr.banksteel.com/login.htm", loginList); Map<String, List<NameValuePair>> actionMap = new HashMap<String, List<NameValuePair>>();
List<NameValuePair> actionList = new ArrayList<NameValuePair>();
actionList.add(new BasicNameValuePair("accountType","7"));
actionMap.put("http://settlement.mgr.banksteel.com/settlement/account/list.htm", actionList); Map<String , String> returnMap = new HashMap<String, String>();
returnMap=doPost(loginMap,actionMap);
System.out.println(returnMap.toString());
System.out.println("-----------------------------------");
} public static Map<String, String> doPost(Map<String,List<NameValuePair>> loginMap,Map<String,List<NameValuePair>> actionMap){
String loginURL ="";
List<NameValuePair> loginNameValuePairs = null;
String actionURL = "";
List<NameValuePair> actionNameValuePairs = null;
int actionStatusCode = 0;
String actionResponseBody = "";
Map<String, String> responseMap = new HashMap<String, String>(); //获取登录的map中的url和参数
for(String entry : loginMap.keySet()){
loginURL = entry;
loginNameValuePairs = loginMap.get(entry);
} //创建一个HttpClientBuilder对象
HttpClientBuilder httpClientBuilder = null;
httpClientBuilder=HttpClientBuilder.create();
//使用HttpClientBuilder对象创建httpClient对象
CloseableHttpClient httpClient = httpClientBuilder.build();
//调用getLoginCookies方法,传入httpClient对象,使得至始至终使用的是一个httpclient
getLoginCookies(loginURL, loginNameValuePairs,httpClient); //此时已经获取到了cookies
for(String actionEntry : actionMap.keySet()){
actionURL = actionEntry;
actionNameValuePairs = actionMap.get(actionEntry);
//采用post方法
HttpPost post = new HttpPost(actionURL);
//设置body
UrlEncodedFormEntity entity = null;
try {
entity=new UrlEncodedFormEntity(actionNameValuePairs,"UTF-8");
post.setEntity(entity);
//获取响应信息
CloseableHttpResponse response = httpClient.execute(post);
actionStatusCode = response.getStatusLine().getStatusCode();
actionResponseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
//将获取的值对放入map中返回给调用方
responseMap.put(actionURL, actionResponseBody);
httpClient.close();
}catch(IOException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
} }
return responseMap;
} public static Map<String, String> getLoginCookies(String loginURL,List<NameValuePair> loginNameValuePairs,
CloseableHttpClient httpClient){
int statusCode =0;
String retStr = null;
Map<String,String> loginMap = new HashMap<String, String>();
//采用post方法
HttpPost post = new HttpPost(loginURL);
//设置body
UrlEncodedFormEntity entity = null;
try {
entity=new UrlEncodedFormEntity(loginNameValuePairs,"UTF-8");
post.setEntity(entity);
//获取响应信息
CloseableHttpResponse response = httpClient.execute(post);
statusCode = response.getStatusLine().getStatusCode();
retStr = EntityUtils.toString(response.getEntity(), "UTF-8");
//将获取的值对放入map中返回给调用方
loginMap.put(loginURL, retStr);
} catch (Exception e) {
// TODO: handle exception
}
return loginMap;
} }

接口测试中如何利用cookies保持会话的更多相关文章

  1. Python3.6下的Requests登录及利用Cookies登录

    利用Python中的Requests模块可以实现Post,Get等发送功能,我以登录某网站为例,记录使用Post发送用户名.密码及图形验证码,以及通过Cookies直接登录的内容. 1.利用POST发 ...

  2. python接口测试:自动保存cookies

    接口测试中遇到上一个请求返回响应包含cookie(如下图登录请求的响应结果).需将cookies保存下来,后续请求自动带入,否则会提示未登录. python requests的cookie类型是< ...

  3. Python实现接口测试中的常见四种Post请求数据

    前情: 在日常的接口测试工作中,模拟接口请求通常有两种方法, 利用工具来模拟,比如fiddler,postman,poster,soapUI等 利用代码来模拟,使用到一些网络模块,比如HttpClie ...

  4. Git中如何利用生成SSH个人公钥访问git仓库

    Git中如何利用生成SSH个人公钥访问git仓库方法(这里以coding平台为例): 1. 获取 SSH 协议地址 在项目的代码页面点击 SSH 切换到 SSH 协议, 获得访问地址, 请使用这个地址 ...

  5. 在Windows Server 2012 R2的Hyper-V中设置虚拟机启用增强会话模式

    在Windows Server 2012 R2的Hyper-V中,可以为虚拟机提供一种全新的连接方式,就是“增强会话模式”,它将让您更加方便的对虚拟机进行操作,比如分辨率的调整.设备的加载,最为方便的 ...

  6. HttpClient在HTTP协议接口测试中的使用

    TTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提交请求与RAW请求,下面我将结合HttpClient来实现一下这三种形式: 一.GET请求: GET请 ...

  7. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  8. CVE-2019-0797漏洞:Windows操作系统中的新零日在攻击中被利用

    https://securelist.com/cve-2019-0797-zero-day-vulnerability/89885/ 前言 在2019年2月,卡巴实验室的自动漏洞防护(AEP)系统检测 ...

  9. Vuejs(14)——在v-for中,利用index来对第一项添加class

    版权声明:出处http://blog.csdn.net/qq20004604 (1)在v-for中,利用index来对第一项添加class <a class="list-group-i ...

随机推荐

  1. WWDC 2017, 让我们看看 iTunesConnect 有了哪些不同

    距离 WWDC 2017 过去已经有 7 天了,小伙伴们是不是已经发现我们的苹果后台和之前的界面有些略微的不同,如果有心的朋友下了 iOS 11 beta 版就会发现设备上的 App Store 界面 ...

  2. canvas 创建颜色渐变柱状图

    最终结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...

  3. HDU3507Print Article (斜率优化DP)

    Zero has an old printer that doesn't work well sometimes. As it is antique, he still like to use it ...

  4. bzoj 2435 道路修建

    Written with StackEdit. Description 在 \(W\) 星球上有 \(n\) 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是 ...

  5. 剑指offer-第四章解决面试题的思路(顺序打印矩阵)

    题目:输入一个矩阵,按照从外向里的顺序依次打印出每一个数.(画图让抽象的问题形象化) 思路:打印矩阵时,把每一层当做一个圈来打印,找到打印整个矩阵的截止条件. 从上图中我可以看到一个6*6的矩阵(长宽 ...

  6. django配置静态文件

    django配置静态文件 参考文章链接:http://blog.csdn.net/hireboy/article/details/8806098

  7. nginx time_wait 较多优化

    1. 查看命令   netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'   结果 ESTABLISHED 22 F ...

  8. AVAWEB学习笔记 ---- 系列文章

    [JAVAWEB学习笔记]网上商城实战5:后台的功能模块 [JAVAWEB学习笔记]网上商城实战4:订单模块 [JAVAWEB学习笔记]网上商城实战3:购物模块和订单模块 [JAVAWEB学习笔记]网 ...

  9. (转)Android强制设置横屏或竖屏

    全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeature(Window.FEATURE_NO_TIT ...

  10. 最长的回文串——hdu3068

    http://acm.hdu.edu.cn/showproblem.php?pid=3068 abcba 5 aab 2 在一个字符串里寻找一条最长的回文串 比较直接的想法是枚举中心点 然后像两边扩散 ...