使用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. Linux下用c语言实现whereis.

    简单的一个whereis的实现,代码如下: #include <stdio.h> #include <errno.h> #include <dirent.h> #i ...

  2. LeetCode OJ :Move Zeroes (移动0)

    Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...

  3. [JS学习笔记]Event对象

    写在前面 学习和总结JS时会伴随性的生成一些dome,其中包含一些动态输出的结果和标注. 之前通过鸡贼的办法实现了在博客中执行JS,但很多时候需要一张干净的页面编写dome,所以尝试通过一些在线的JS ...

  4. pg_test_fsync使用记录

    pg_test_fsync pg_test_fsync旨在让您合理地了解特定系统上最快的wal_sync_method,以及在发生识别的I / O问题时提供诊断信息. 但是,pg_test_fsync ...

  5. Every derived table must have its own alias

    完整错误信息如下: Every derived table must have its own alias 三月 28, 2017 10:20:46 上午 org.apache.catalina.co ...

  6. stringstream 用法

    stringstream stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的 iostream.fstream 有类似的操作方式.要使用 stringst ...

  7. 给Java新手的一些建议——Java知识点归纳(Java基础部分)

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给 ...

  8. 让ListView中的控件失去焦点:android:descendantFocusability="blocksDescendants"

    值得注意的是,ListView中的控件不能设置clickable="true",否则会无视父控件的blockDescendants. 可参考: https://segmentfau ...

  9. 【spring源码学习】spring的远程调用实现源码分析

    [一]spring的远程调用提供的基础类 (1)org.springframework.remoting.support.RemotingSupport ===>spring提供实现的远程调用客 ...

  10. phpstorm2017.3.6的激活、样式设置和汉化

    一:安装phpstorm2017.3.6,并激活.设置样式.(1)先在phstorm官网里www.jetbrains.com下载phpstorm2017.3.6,按照步骤安装即可.下面开始激活!(2) ...