zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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