httpclient常规封装的方法

时间:2021-03-29 14:21:50
       <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.41.1</version>
</dependency>
<dependency>
<groupId>com.vimalselvam</groupId>
<artifactId>testng-extentsreport</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
package zhihuisystem.HttpClient_Test;

import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
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.conn.scheme.Scheme;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils; public class HttpClient_Utils {
// 常规get请求
public static String Getmethod(String url) {
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpGet get = new HttpGet(url);
CloseableHttpResponse respons1 = null;
try {
respons1 = client.execute(get);
} catch (ClientProtocolException e1) {
System.out.println("客户端get请求异常");
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 切割字符串
String result = respons1.getStatusLine().toString().split(" ")[1]; try {
client.close();// 释放资源
} catch (IOException e) {
System.out.println("请求连接无法关闭,关注get方法!");
e.printStackTrace();
}
return result; } // 常规P0ST请求
public static String HttpPostWithJson(String url, String json) { String returnValue = "这是默认返回值,接口调用失败";
CloseableHttpClient httpClient = HttpClients.createDefault();
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
// 创建HttpClient对象
httpClient = HttpClients.createDefault();
// 创建httpPost对象
HttpPost httpPost = new HttpPost(url);
// 给httpPost设置JSON格式的参数
StringEntity requestEntity = new StringEntity(json, "utf-8");
requestEntity.setContentEncoding("UTF-8");
httpPost.setHeader("Content-type", "application/json");
httpPost.setEntity(requestEntity);
// 发送HttpPost请求,获取返回值
returnValue = httpClient.execute(httpPost, responseHandler); // 调接口获取返回值,用此方法
} catch (Exception e) {
System.out.println("请求返回值为空!");
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
System.out.println("请求连接无法关闭,关注post方法!");
e.printStackTrace();
}
}
// 第五步:处理返回值
return returnValue;
} // 忽略证书的HTTPS请求 - get
public static String HttpsGetIgnoreCertification(String url)
throws NoSuchAlgorithmException, KeyManagementException, ClientProtocolException, IOException {
// First create a trust manager that won't care.
X509TrustManager trustManager = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// Don't do anything.
} public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// Don't do anything.
} public X509Certificate[] getAcceptedIssuers() {
// Don't do anything.
return null;
} };
// 现在将信任管理器放到SSLContext中。
SSLContext sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, new TrustManager[] { trustManager }, null);
SSLSocketFactory sf = new SSLSocketFactory(sslcontext);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", sf, 443)); HttpGet httpget = new HttpGet(url);
// String result = "";
httpget.setHeader("Content-type", "application/json");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
// String result1 = response.getStatusLine().toString();
// String result2 = response.getStatusLine().toString().split(" ")[2];
String result3 = response.getStatusLine().toString().split(" ")[1];
return result3; } // 忽略证书的HTTPS请求 - post
public static String HttpsPostIgnoreCertification(String url, String requestData)
throws NoSuchAlgorithmException, KeyManagementException, ClientProtocolException, IOException {
// First create a trust manager that won't care.
X509TrustManager trustManager = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// Don't do anything.
} public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// Don't do anything.
} public X509Certificate[] getAcceptedIssuers() {
// Don't do anything.
return null;
} };
// 现在将信任管理器放到SSLContext中。
SSLContext sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, new TrustManager[] { trustManager }, null);
SSLSocketFactory sf = new SSLSocketFactory(sslcontext);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", sf, 443)); HttpPost httpPost = new HttpPost(url);
String result = "";
// httpPost.setHeader("Authorization", "basic " + "dGNsb3VkYWRtaW46dGNsb3VkMTIz");
httpPost.setHeader("Content-type", "application/json");
StringEntity reqEntity;
// 将请求参数封装成HttpEntity
reqEntity = new StringEntity(requestData);
BufferedHttpEntity bhe = new BufferedHttpEntity(reqEntity);
httpPost.setEntity(bhe); HttpResponse response = httpclient.execute(httpPost);
HttpEntity resEntity = response.getEntity();
InputStreamReader reader = new InputStreamReader(resEntity.getContent());
// 取内存资源
char[] buff = new char[1024];
int length = 0;
while ((length = reader.read(buff)) != -1) {
result += new String(buff, 0, length);
}
httpclient.close();
return result; // System.out.println(result);
} // 启用HTTPS携带证书GET请求
public static String HttpsforGet(String url, String keystore_PathFile, String keypwd) throws IOException,
KeyManagementException, NoSuchAlgorithmException, KeyStoreException, CertificateException {
HttpGet httpGet = new HttpGet(url);
CloseableHttpClient httpClient = null;
if (url.startsWith("https")) {
// "E:\\White_testNG\\mock\\mock_https\\isa\\isa.keystor"
File cert = new File(keystore_PathFile);
String keystore = keypwd;
// Trust own CA and all self-signed certs
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(cert, keystore.toCharArray(), new TrustSelfSignedStrategy()).build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" },
null, NoopHostnameVerifier.INSTANCE);
httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
} else {
httpClient = HttpClients.createDefault();
}
try (CloseableHttpClient _httpClient = httpClient; CloseableHttpResponse res = _httpClient.execute(httpGet);) { StatusLine sl = res.getStatusLine();
// System.out.println(sl.toString().split(" ")[1]);
String result = sl.toString().split(" ")[1];
/*
* if (sl != null) { System.out.println(sl.getStatusCode()); StringBuilder
* builder = new StringBuilder(); try (InputStream is =
* res.getEntity().getContent(); InputStreamReader isr = new
* InputStreamReader(is); BufferedReader br = new BufferedReader(isr);) { String
* line = br.readLine(); while(line != null) { builder.append(line); line =
* br.readLine(); } System.out.println("响应结果:" + builder.toString());
*/
return result;
}
} // 启用HTTPS携带证书post请求
public static String HttpsforPost(String url, String keystore_PathFile, String keypwd, String json)
throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException,
KeyStoreException, CertificateException { String returnValue = "这是默认返回值,接口调用失败";
HttpPost httppost = new HttpPost(url);
CloseableHttpClient httpClient = null;
if (url.startsWith("https")) {
File cert = new File(keystore_PathFile);
String keystore = keypwd;
// Trust own CA and all self-signed certs
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(cert, keystore.toCharArray(), new TrustSelfSignedStrategy()).build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" },
null, NoopHostnameVerifier.INSTANCE);
httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
} else {
httpClient = HttpClients.createDefault();
}
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try (CloseableHttpClient _httpClient = httpClient; CloseableHttpResponse res = _httpClient.execute(httppost);) {
StringEntity requestEntity = new StringEntity(json, "utf-8");
requestEntity.setContentEncoding("UTF-8");
httppost.setHeader("Content-type", "application/json");
httppost.setEntity(requestEntity);
// 发送HttpPost请求,获取返回值
returnValue = httpClient.execute(httppost, responseHandler); // 调接口获取返回值,用此方法 // System.out.println(returnValue); }
return returnValue; } }