使用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. jdbc之防sql注入攻击

    1.SQL注入攻击:    由于dao中执行的SQL语句是拼接出来的,其中有一部分内容是由用户从客户端传入,所以当用户传入的数据中包含sql关键字时,就有可能通过这些关键字改变sql语句的语义,从而执 ...

  2. 记录一个因sqlmap导致的错误

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "- ...

  3. Windows编程

    本文整理自百科.知乎与 科学家的世界 问题一:为什么开发windows应用程序不用c 而用.net,java,c++? 用 c+windows API  开发windows 应用程序  比用.net, ...

  4. fn project Message Queues 配置

      Message Queues A message queue is used to coordinate asynchronous function calls that run through ...

  5. ubuntu下网卡eth1如何修改为eth0

    正常来说,Linux在识别网卡时第一张会是eth0,第二张才是eth1.有时候我们使用虚拟机克隆技术后网卡的信息就会改变,新克隆出来的虚拟主机网卡名字可能变为eth1.无论我们怎么修改都无法改变,这就 ...

  6. linux下PS1命令提示符设置

    linux下PS1命令提示符设置 在此文件最后一行添加:vim /etc/profileexport PS1='[\u@\h \W]\$ '   #这里必须用单引号.     \d :代表日期,格式为 ...

  7. composer的安装和使用 学习日志

    如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...

  8. setTimeout传参

    unction test(s) { alert(s); } window.setTimeout(function(){test('str');},1000); 这样就可以了...为什么是这样呢.因为s ...

  9. 【转】JMeter入门

    一.JMeter概述 JMeter就是一个测试工具,相比于LoadRunner等测试工具,此工具免费,且比较好用,但是前提当然是安装Java环境: JMeter可以做 (1)压力测试及性能测试: (2 ...

  10. Java-Runoob:Java 对象和类

    ylbtech-Java-Runoob:Java 对象和类 1.返回顶部 1. Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 ...