接口测试中如何利用cookies保持会话
使用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保持会话的更多相关文章
- Python3.6下的Requests登录及利用Cookies登录
利用Python中的Requests模块可以实现Post,Get等发送功能,我以登录某网站为例,记录使用Post发送用户名.密码及图形验证码,以及通过Cookies直接登录的内容. 1.利用POST发 ...
- python接口测试:自动保存cookies
接口测试中遇到上一个请求返回响应包含cookie(如下图登录请求的响应结果).需将cookies保存下来,后续请求自动带入,否则会提示未登录. python requests的cookie类型是< ...
- Python实现接口测试中的常见四种Post请求数据
前情: 在日常的接口测试工作中,模拟接口请求通常有两种方法, 利用工具来模拟,比如fiddler,postman,poster,soapUI等 利用代码来模拟,使用到一些网络模块,比如HttpClie ...
- Git中如何利用生成SSH个人公钥访问git仓库
Git中如何利用生成SSH个人公钥访问git仓库方法(这里以coding平台为例): 1. 获取 SSH 协议地址 在项目的代码页面点击 SSH 切换到 SSH 协议, 获得访问地址, 请使用这个地址 ...
- 在Windows Server 2012 R2的Hyper-V中设置虚拟机启用增强会话模式
在Windows Server 2012 R2的Hyper-V中,可以为虚拟机提供一种全新的连接方式,就是“增强会话模式”,它将让您更加方便的对虚拟机进行操作,比如分辨率的调整.设备的加载,最为方便的 ...
- HttpClient在HTTP协议接口测试中的使用
TTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提交请求与RAW请求,下面我将结合HttpClient来实现一下这三种形式: 一.GET请求: GET请 ...
- C/S模式开发中如何利用WebBrowser控件制作导航窗体
原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...
- CVE-2019-0797漏洞:Windows操作系统中的新零日在攻击中被利用
https://securelist.com/cve-2019-0797-zero-day-vulnerability/89885/ 前言 在2019年2月,卡巴实验室的自动漏洞防护(AEP)系统检测 ...
- Vuejs(14)——在v-for中,利用index来对第一项添加class
版权声明:出处http://blog.csdn.net/qq20004604 (1)在v-for中,利用index来对第一项添加class <a class="list-group-i ...
随机推荐
- 条款3:尽可能的使用const
const成员函数的一般好处有: 它使得class接口比较容易理解. 它使得操纵const对象成为可能. 使用的过程中应该在const与non const成员函数之间避免代码重复: class Tex ...
- react: menuService
1.获取菜单对象 static findCurrentItem(items, currentState, currentItem) { _.forEach(items, function (item) ...
- html 压缩成一行
文章java gulp-htmlmin 减少下载的时间
- Redis补充
Redis补充 (1)redis基本概念 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set ...
- Python中实现装饰模式的三种方式
功能目标 编写一个可以打印被装饰函数名称.执行时间.内存地址得装饰器 前置依赖包 import time import functools from decorator import decorato ...
- Java设计模式百例 - 观察者模式
观察者(Observer)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅(Publish/Subscribe ...
- R+markdown+LaTeX 中文编译解决方案
一丢丢前言 很久之前曾试图以Rmarkdown编译pdf文档,无奈怎么鼓捣都会error,搜索了很久都没能找到比较好的解决方案.在配置上将编译器调成了xeLaTeX后就不了了之.这两天心血来潮研究了一 ...
- 【常用软件】木木的常用软件点评(2)------VC程序员常用工具篇
摘自:http://blog.csdn.net/liquanhai/article/details/7215045 木木的常用软件点评(2)------VC程序员常用工具篇 分类: VC++经验总结 ...
- 动态加载css、js引用
在js代码中动态的加载js.css文件的引用 function addJsCssByLink(type,url) { var doc=document; if(type="js") ...
- NOI 2018 你的名字
因为机房里的小伙伴都在看<你的名字.>而我不想看 所以来写了这道题... 给一个 $S$ 串,$q$ 次询问,每次一个 $T$ 串,问 $T$ 有多少没在 $S[l,r]$ 中以子串形式出 ...