接口测试中如何利用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 ...
随机推荐
- Getting started with Android and Kotlin (译文)
原文链接 http://kotlinlang.org/docs/tutorials/kotlin-android.html 写在前面 Kotlin 是一个基于 JVM 的新的编程语言,由 JetBra ...
- php项目,cpu暴增问题查找
背景: 前几天通过WordPress上线一个应用(前后台部署分离,后台走内网内部使用,前台做了全站缓存对外使用). 今天访问后台应用发现开始报504,一段时间后全部504. 解决方案: 登录容器发现容 ...
- (十二)break,continue
class Break { //break,continue public static void main(String[] args) { //break for(int i =0;i<=5 ...
- header("Location:http://www.baidu.com");
php 中的跳转函数 header("Location:http://www.baidu.com"); 但是一定要放在文件的开头 不允许有任何输出. 否则在之前添加 ob_s ...
- uid
var uid = 0 function nextUid() { return ++uid }
- python学习之控制语句
#if statement number=int(input("please input a number")); if number<10 : print("is ...
- 剑指Offer面试题:1.实现单例模式
一 题目:实现单例模式Singleton 题目:设计一个类,我们只能生产该类的一个实例. 只能生成一个实例的类是实现了Singleton(单例)模式的类型.由于设计模式在面向对象程序设计中起着举足轻重 ...
- Scrapy组件之item
Scrapy是一个流行的网络爬虫框架,从现在起将陆续记录Python3.6下Scrapy整个学习过程,方便后续补充和学习.Python网络爬虫之scrapy(一)已经介绍scrapy安装.项目创建和测 ...
- bzoj 3173 最长上升子序列
Written with StackEdit. Description 给定一个序列,初始为空.现在我们将\(1\)到\(N\)的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字, ...
- LeetCode Minimum Time Difference
原题链接在这里:https://leetcode.com/problems/minimum-time-difference/description/ 题目: Given a list of 24-ho ...