1 package Common; 2 3 4 import com.google.gson.Gson; 5 import org.apache.http.HttpResponse; 6 import org.apache.http.NameValuePair; 7 import org.apache.http.client.CookieStore; 8 import org.apache.http.client.entity.UrlEncodedFormEntity; 9 import org.apache.http.client.methods.HttpGet; 10 import org.apache.http.client.methods.HttpPost; 11 import org.apache.http.entity.StringEntity; 12 import org.apache.http.impl.client.BasicCookieStore; 13 import org.apache.http.impl.client.CloseableHttpClient; 14 import org.apache.http.impl.client.HttpClients; 15 import org.apache.http.impl.cookie.BasicClientCookie; 16 import org.apache.http.message.BasicNameValuePair; 17 18 import java.io.IOException; 19 import java.util.ArrayList; 20 import java.util.List; 21 import java.util.Map; 22 23 24 public class DoHttpClient { 25 public static CookieStore cookieStore = new BasicCookieStore(); 26 public CloseableHttpClient client = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); 27 28 /** 29 * get请求发送 30 * */ 31 public HttpResponse sendGet(String url,String parameter) throws IOException { 32 if(!parameter.isEmpty()){ 33 url = url + "?" + parameter; 34 } 35 36 HttpGet httpGet = new HttpGet(url); 37 HttpResponse response = client.execute(httpGet); 38 39 System.out.println("请求状态码:"+response.getStatusLine()); 40 41 setCookieStore(response); 42 43 return response; 44 } 45 46 /** 47 *post请求发送 48 * 请求参数json格式无嵌套map数据 49 * 传入String param 50 **/ 51 public HttpResponse sendPost(String url, String param) throws IOException { 52 53 HttpPost httpPost = new HttpPost(url); 54 55 List<NameValuePair> formParms = new ArrayList<NameValuePair>(); 56 FormatProcessing(formParms,param); 57 httpPost.setEntity(new UrlEncodedFormEntity(formParms,"UTF-8")); 58 59 httpPost.setHeader("Context-Type","application/x-www-form-urlencoded"); 60 61 HttpResponse response = client.execute(httpPost); 62 63 System.out.println("请求状态码:"+response.getStatusLine()); 64 65 setCookieStore(response); 66 67 return response; 68 } 69 70 /** 71 *post请求发送 72 * 请求参数json格式有嵌套map数据 73 * 传入JSONObject 74 **/ 75 public HttpResponse sendPost(String url, Map<String,Object> map) throws IOException { 76 HttpPost httpPost = new HttpPost(url); 77 78 Gson gson = new Gson(); 79 String parameter = gson.toJson(map); 80 StringEntity stringEntity = new StringEntity(parameter); 81 httpPost.setEntity(stringEntity); 82 83 httpPost.setHeader("Context-Type","application/x-www-form-urlencoded"); 84 85 HttpResponse response = client.execute(httpPost); 86 87 System.out.println("请求状态码:"+response.getStatusLine()); 88 89 setCookieStore(response); 90 91 return response; 92 } 93 94 /** 95 *传参处理 96 * param为key=value?key=value形式,转化成list 97 * 98 */ 99 100 public void FormatProcessing(List<NameValuePair> formParams, String param){ 101 String[] nameValue = param.split("&"); 102 for(int i=0;i<nameValue.length;i++){ 103 String key = nameValue[i].split("=")[0]; 104 String value = nameValue[i].split("=")[1]; 105 BasicNameValuePair basicNameValuePair = new BasicNameValuePair(key,value); 106 formParams.add(basicNameValuePair); 107 } 108 } 109 110 /** 111 * 保留cookie 112 * @param httpResponse 113 */ 114 public void setCookieStore(HttpResponse httpResponse){ 115 String setCookie = new String(); 116 if(httpResponse.getFirstHeader("set-Cookies")!=null){ 117 setCookie = httpResponse.getFirstHeader("set-Cookie").getValue(); 118 } 119 String JSESSIONID = new String(); 120 if(setCookie.isEmpty()==false){ 121 JSESSIONID = setCookie.substring(Integer.parseInt("JSESSIONID="),setCookie.indexOf(";")); 122 123 } 124 //新建一个Cookie,只要使用同一个HttpClient且未关闭连接,则可以使用相同会话来访问其他要求登录验证的服务,保持cookies对话 125 BasicClientCookie basicClientCookie = new BasicClientCookie("JSESSIONID",JSESSIONID); 126 basicClientCookie.setVersion(0); 127 basicClientCookie.setDomain("127.0.0.1");//Cookie中的setDomain()主要用来在两个不同名称但是后缀相同的网站地址上.这样两个网站就能使用同一个cookie了 128 basicClientCookie.setPath("/CwlProClient");//setPath()主要用来确定什么后缀下能够使用这个cookie.即地址栏上面的地址的约束 129 cookieStore.addCookie(basicClientCookie);//设置Cookie所遵从的协议版本[默认版本0(遵从原先的Netscape规范) 130 131 } 132 }
这里的get和post请求,直接返回了HttpResponse类型的response用于后面的数据校验,通过JsonPath来提取校验;
其中post请求,传参可以直接传String类型的键值对,然后用FormatProcessing来处理;传参为嵌套了map的话,通过gson来转化;
最后是cookie的处理,获取后把他传回去全局变量里面去使用;