HttpClent工具类

2019-08-16 11:14:21来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

HttpClent工具类

前后端分离的项目中,涉及到了多个包之间的接口调用,其中涉及到的Httpclient相关知识点,特此记录一下:

package xxxx.utils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.*;

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.ParseException;


public class HttpClentUtil {

private static PoolingHttpClientConnectionManager connectionManager = null;
private static HttpClientBuilder httpBuilder = null;
private static RequestConfig requestConfig = null;

private static int MAXCONNECTION = 10;

private static int DEFAULTMAXCONNECTION = 5;

private static String IP = "cnivi.com.cn";
private static int PORT = 9066;

static {
//设置http的状态参数
requestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.build();

HttpHost target = new HttpHost(IP, -1); //不想制定具体的端口 则设置为-1
connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(MAXCONNECTION);//客户端总并行链接最大数
connectionManager.setDefaultMaxPerRoute(DEFAULTMAXCONNECTION);//每个主机的最大并行链接数
connectionManager.setMaxPerRoute(new HttpRoute(target), 20);
httpBuilder = HttpClients.custom();
httpBuilder.setConnectionManager(connectionManager);
}

public static CloseableHttpClient getConnection() {
CloseableHttpClient httpClient = httpBuilder.build();
return httpClient;
}

/**
* 从url请求资源 获取数据(支持get post)
* @param map url参数键值对
* @param url 请求路径
* @param method 请求方式 (get/post)
* @return
*/
public static String getRequest( String url, Map<String, String> map,String method) {
String strResult = "请求失败";
HttpClient client = getConnection();

List<NameValuePair> params = new ArrayList<NameValuePair>();
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Map.Entry<String, String> e : entrySet) {
String name = e.getKey();
String value = e.getValue();
NameValuePair pair = new BasicNameValuePair(name, value);
params.add(pair);
}
HttpUriRequest reqMethod = null;
if ("post".equals(method.toLowerCase())) {
reqMethod = RequestBuilder.post().setUri(url)
.addParameters(params.toArray(new BasicNameValuePair[params.size()])).setConfig(requestConfig)
.build();
} else if ("get".equals(method.toLowerCase())) {
reqMethod = RequestBuilder.get().setUri(url)
.addParameters(params.toArray(new BasicNameValuePair[params.size()])).setConfig(requestConfig)
.build();
}

System.err.println("---------------------------"+reqMethod.getURI());

try {
HttpResponse response = client.execute(reqMethod);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
strResult = EntityUtils.toString(entity, "utf-8");
}
} catch (ClientProtocolException e1) {
e1.printStackTrace();
strResult = e1.getMessage();
} catch (IOException e1) {
e1.printStackTrace();
strResult = e1.getMessage();
}

System.err.println("---------------------------"+strResult);

return strResult;
}

public static void main(String args[]) throws IOException {
Map<String, String> map = new HashMap<String, String>();
map.put("token", "YTE0MzEwYjYtZGUyOS00YzE5LWEzMDgtNGVmZDBhYzgwNWUyOjIwMTkwNzI2MTE6NDM6NDc=");
map.put("id", "1234567890");

String URL = "http://192.168.0.195:9270/api/issue/v1/defects/testrpc";

System.err.println(getRequest(URL, map, "get"));
System.err.println(getRequest(URL + "/post", map, "post"));
System.err.println(get(URL, map));
System.err.println(post(URL + "/post", map));
}

/**
* 从url请求资源 获取数据(get方式)
* @param url 请求路径
* @param mapParams url参数键值对
* @return
*/
public static String get(String url, Map<String, String> mapParams) {

String strResult="请求失败";
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
// 创建httpget.
String getUrl =url;
//键找值遍历
if (mapParams != null && mapParams.size() >= 1) {
Set<String> set1 = mapParams.keySet();
int index =1;
for (String key : set1) {
String value = mapParams.get(key);
if(index==1){
getUrl += "?" + key + "=" + value;
}else{
getUrl += "&" + key + "=" + value;
}
index++;
}
}

HttpGet httpget = new HttpGet(getUrl);

System.err.println("---------------------------"+ httpget.getURI());

// 执行get请求.
CloseableHttpResponse response = httpclient.execute(httpget);
try {
// 获取响应实体
HttpEntity entity = response.getEntity();
if (entity != null) {
// 打印响应内容
strResult = EntityUtils.toString(entity);
}

} finally {
response.close();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
strResult =e.getMessage();
} catch (ParseException e) {
e.printStackTrace();
strResult =e.getMessage();
} catch (IOException e) {
e.printStackTrace();
strResult =e.getMessage();
} finally {
// 关闭连接,释放资源
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}

System.err.println("---------------------------" + strResult);

return strResult;
}

/**
* 从url请求资源 获取数据(post方式)
* @param url 请求路径
* @param mapParams url参数键值对
* @return
*/
public static String post(String url,Map<String, String> mapParams) {
String strResult="请求失败";

// 创建默认的httpClient实例.
CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建httppost
HttpPost httppost = new HttpPost(url);
// 创建参数队列
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("whkp", "softoptic"));
if (mapParams != null && mapParams.size() >= 1) {
Set<String> set1 = mapParams.keySet();
for (String key : set1){
String value = mapParams.get(key);
formparams.add(new BasicNameValuePair(key, value));
}
}

UrlEncodedFormEntity uefEntity;
try {
uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httppost.setEntity(uefEntity);

System.err.println("---------------------------"+ httppost.getURI());

CloseableHttpResponse response = httpclient.execute(httppost);
try {
HttpEntity entity = response.getEntity();
if (entity != null) {
strResult = EntityUtils.toString(entity, "UTF-8");
}
} finally {
response.close();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
strResult =e.getMessage();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
strResult =e1.getMessage();
} catch (IOException e) {
e.printStackTrace();
strResult =e.getMessage();
} finally {
// 关闭连接,释放资源
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}

System.err.println("---------------------------" + strResult);

return strResult;
}


}


原文链接:https://www.cnblogs.com/zt2710/p/11251235.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:bit和byte的区别是什么?

下一篇:Maven的使用