HttpClient模拟postman/浏览器(登录+访问接口)详解编程语言
2023-06-13 09:11:51 时间
创建HttpClient实例时应用了单例模式(饿汉式)
package com.jake.autotest.util; import com.jake.autotest.constant.BpmUatConstants; import org.apache.commons.lang3.StringUtils; import org.apache.http.*; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.util.ArrayList; public class HttpClientUtils {
HttpPost loginPost = new HttpPost(BpmUatConstants.LOGIN_URL); ArrayList NameValuePair loginPairs = new ArrayList (); loginPairs.add(new BasicNameValuePair("username", BpmUatConstants.USERNAME)); loginPairs.add(new BasicNameValuePair("password", BpmUatConstants.PASSWORD)); try { loginPost.setEntity(new UrlEncodedFormEntity(loginPairs, "utf-8")); client.execute(loginPost); } catch (IOException e) { e.printStackTrace(); /** * 以Get请求方式访问需要事先登录的HTTP接口 * @param url HTTP接口的URL * @param paramStr 请求参数的字符串形式:"param1=xxx param2=yyy param3=zzz" * @return 访问HTTP接口得到的Json数据 public static String visitByGet(String url, String paramStr) { String json = null; try { URIBuilder uriBuilder = new URIBuilder(url); if (StringUtils.isNotEmpty(paramStr)) { ArrayList NameValuePair paramPairs = getNameValuePairs(paramStr); uriBuilder.setParameters(paramPairs); HttpGet visitGet = new HttpGet(uriBuilder.build()); CloseableHttpResponse visitResponse = client.execute(visitGet); json = EntityUtils.toString(visitResponse.getEntity()); } catch (Exception e) { e.printStackTrace(); return json; /** * 以Post请求方式访问需要事先登录的HTTP接口 * @param url HTTP接口的URL * @param paramStr 请求参数的字符串形式:"param1=xxx param2=yyy param3=zzz" * @return 访问HTTP接口得到的Json数据 public static String visitByPost(String url, String paramStr) { String json = null; try { HttpPost visitPost = new HttpPost(url); if (StringUtils.isNotEmpty(paramStr)) { ArrayList NameValuePair paramPairs = getNameValuePairs(paramStr); visitPost.setEntity(new UrlEncodedFormEntity(paramPairs, "utf-8")); HttpResponse visitResponse = client.execute(visitPost); json = EntityUtils.toString(visitResponse.getEntity()); } catch (Exception e) { e.printStackTrace(); return json; /** * 1. 把传入参数"param1=xxx param2=yyy param3=zzz"以 为分离点拆分为params数组,其中 * params[0]="param1=xxx", params[1]="param2=yyy", param[2]="param3=zzz" * 2. 由1可以看出,params数组的每一个元素都是name-value对的字符串形式,以=为分离点将该数组 * 拆分为一个长度为2的数组nv(name-value),其中,nv[0], nv[1]分别对应BasicNameValuePair * 构造方法的第一、二个参数。 * @param paramStr 请求参数的字符串形式:"param1=xxx param2=yyy param3=zzz" * @return HttpClient执行HttpPost或HttpGet请求所需的NameValuePair对象集合 private static ArrayList NameValuePair getNameValuePairs(String paramStr) { ArrayList NameValuePair paramPairs = new ArrayList (); String[] params = paramStr.split(" "); for (String param: params) { String[] nv = param.split("="); if (nv.length == 2) { paramPairs.add(new BasicNameValuePair(nv[0], nv[1])); return paramPairs;
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19601.html
cjavaxml相关文章
- 隔空点你的手机!新攻击装置可向屏幕发送电磁脉冲,模拟手指点击
- IP 网络实验(模拟+设备)(IP网络)
- R语言收益率和波动性模拟股票价格COMP226带自测题
- postman汉化包_python模拟post请求
- 半导体模拟芯片
- 接口测试|postman模拟请求头&界面的响应信息
- 使用postman模拟微信小程序支付回调
- 多体动力学模拟仿真系统软件Adams,Adams软件中文版下载安装教程
- 用java语言模拟硬件上的DES加密过程详解编程语言
- python模拟点击手机上的图片按钮详解编程语言
- python模拟鼠标拖动教程详解编程语言
- 使用脚本实现Redis锁超时模拟(如何模拟redis锁超时)
- 基于Redis的消息队列模拟实现(redis模拟mq)
- 模拟OICQ的实现思路和核心程序(三)
- asp.netASPxTextBox等控件实现"回车模拟Tab"的常用代码整理
- php模拟socket一次连接,多次发送数据的实现代码
- php中通过curl模拟登陆discuz论坛的实现代码
- javascriptjscroll模拟html元素滚动条
- javascript模拟坦克大战游戏(html5版)附源码下载
- Python中模拟enum枚举类型的5种方法分享