本篇内容主要讲解“java的http请求工具类HttpClientUtils怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java的http请求工具类HttpClientUtils怎么使用”吧!
import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.commons.collections.MapUtils;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpRequestBase;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.HttpClientConnectionManager;import org.apache.http.conn.socket.ConnectionSocketFactory;import org.apache.http.conn.ssl.AllowAllHostnameVerifier;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.SSLContexts;import org.apache.http.conn.ssl.X509HostnameVerifier;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;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 org.springframework.util.CollectionUtils;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.SocketTimeoutException;import java.net.URLEncoder;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;public class HttpClientUtils { private static Log logger = LogFactory.getLog(HttpClientUtils.class); private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); private static CloseableHttpClient httpClient = null; private static final int DEFAULT_MAX_TOTAL_CONNECTION = 1024; private static final int DEFAULT_MAX_PER_ROUTE = 300; private static final String DEFAULT_ENCODING = "UTF-8"; // 默认的查询参数及返回结果的字符串编码 private static final String CONTENT_TYPE_TEXT_XML = "application/xml"; // 默认的查询参数及返回结果的字符串编码 private static final String APPLICATION_XML = "text/xml"; // 默认的查询参数及返回结果的字符串编码 private static final int DEFAULT_CONNECTION_TIME_OUT = 60000; // 默认连接超时时间, // 60秒 private static final int DEFAULT_READ_TIME_OUT = 200000; // 默认响应超时时间, 60秒 public static JSONObject custRespHeader = new JSONObject(); static { poolingHttpClientConnectionManager.setMaxTotal(DEFAULT_MAX_TOTAL_CONNECTION); poolingHttpClientConnectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_PER_ROUTE); httpClient = HttpClients.custom().setConnectionManager(poolingHttpClientConnectionManager).build(); } private HttpClientUtils() { } public static String invokeGet(String url, Map<String, String> params, String encode, int connectTimeout, int readTimeout) { if (connectTimeout <= 0) { return null; } RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeout) .setConnectTimeout(connectTimeout).setConnectionRequestTimeout(connectTimeout).build(); String responseString; String requestUrl; try { requestUrl = buildRequestUrl(url, params); } catch (UnsupportedEncodingException e) { logger.error("encode http get params error, params is " + params, e); return ""; } HttpPost httpGet = new HttpPost(requestUrl); httpGet.setHeader("Connection", "close"); httpGet.setConfig(requestConfig); responseString = doRequest(httpGet, encode); return responseString; } public static String invokePost(String requestUrl, Map<String, Object> params) { return invokePost(requestUrl, params, null, null, DEFAULT_ENCODING, DEFAULT_CONNECTION_TIME_OUT, DEFAULT_READ_TIME_OUT); } public static String invokePost(String requestUrl, Map<String, Object> params,Map<String, String> requestHeader) { return invokePost(requestUrl, params, requestHeader, null, DEFAULT_ENCODING, DEFAULT_CONNECTION_TIME_OUT, DEFAULT_READ_TIME_OUT); } public static String invokePost(String requestUrl, Map<String, String> requestHeader, String requestBody) { return invokePost(requestUrl, null, requestHeader, requestBody, DEFAULT_ENCODING, DEFAULT_CONNECTION_TIME_OUT, DEFAULT_READ_TIME_OUT); } public static String invokePost(String requestUrl, Map<String, Object> params, Map<String, String> requestHeader, String requestBody, String encode, int connectTimeout, int readTimeout) { RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeout) .setConnectTimeout(connectTimeout).setConnectionRequestTimeout(connectTimeout).build(); String responseString; HttpPost httpPost = new HttpPost(requestUrl); httpPost.setConfig(requestConfig); if (MapUtils.isNotEmpty(requestHeader)) { for (Map.Entry<String, String> entry : requestHeader.entrySet()) { httpPost.addHeader(entry.getKey(), entry.getValue()); } } buildPostParams(httpPost, params, requestBody, encode); responseString = doRequest(httpPost, encode); return responseString; } private static void buildPostParams(HttpPost httpPost, Map<String, Object> params, String requestBody, String encode) { try { if (MapUtils.isNotEmpty(params)) { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); for (Map.Entry<String, Object> entry : params.entrySet()) { String value = null; if (entry.getValue() instanceof String) { value = (String) entry.getValue(); } else { value = JSON.toJSONString(entry.getValue()); } nameValuePairs.add(new BasicNameValuePair(entry.getKey(), value)); } httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, encode)); } if (StringUtils.isNotBlank(requestBody)) { httpPost.setEntity(new StringEntity(requestBody, encode)); } } catch (UnsupportedEncodingException e) { logger.error("HttpClientUtils.buildPostParams error, params = " + params, e); } } private static String doRequest(HttpRequestBase httpRequestBase, String encode) { String responseString = null; try { long start = System.currentTimeMillis(); CloseableHttpResponse response = httpClient.execute(httpRequestBase); logger.info("HttpClientUtils Begin Invoke: " + httpRequestBase.getURI() + ", cost time " + (System.currentTimeMillis() - start) + " ms"); try { Header[] headers = response.getHeaders("isLogin"); if(headers!=null && headers.length>0){ custRespHeader.put(headers[0].getName(),headers[0].getValue()); } HttpEntity entity = response.getEntity(); try { if (entity != null) { responseString = EntityUtils.toString(entity, encode); } } finally { if (entity != null) { entity.getContent().close(); } } } catch (Exception e) { e.printStackTrace(); logger.error(String.format("[HttpClientUtils.doRequest] get response error, url:%s", httpRequestBase.getURI()), e); responseString = ""; } finally { if (response != null) { response.close(); } } } catch (SocketTimeoutException e) { e.printStackTrace(); logger.error(String.format("[HttpClientUtils.doRequest] invoke get timout error, url:%s", httpRequestBase.getURI()), e); responseString = ""; } catch (Exception e) { e.printStackTrace(); logger.error( String.format("[HttpClientUtils.doRequest] invoke get error, url:%s", httpRequestBase.getURI()), e); responseString = ""; } finally { httpRequestBase.releaseConnection(); } logger.info("HttpClientUtils response : " + responseString); return responseString; } private static String buildRequestUrl(String url, Map<String, String> params) throws UnsupportedEncodingException { if (CollectionUtils.isEmpty(params)) { return url; } StringBuilder requestUrl = new StringBuilder(); requestUrl.append(url); int i = 0; for (Map.Entry<String, String> entry : params.entrySet()) { if (i == 0) { requestUrl.append("?"); } requestUrl.append(entry.getKey()); requestUrl.append("="); String value = entry.getValue(); requestUrl.append(URLEncoder.encode(value, "UTF-8")); requestUrl.append("&"); i++; } requestUrl.deleteCharAt(requestUrl.length() - 1); return requestUrl.toString(); } public static void setStringParams(HttpPost httpost, Map<String, String> params) { List<NameValuePair> nvps = new ArrayList<NameValuePair>(); Set<String> keySet = params.keySet(); for (String key : keySet) { nvps.add(new BasicNameValuePair(key, params.get(key).toString())); } try { httpost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); } catch (UnsupportedEncodingException e) { } } private static String sendRequest(HttpRequestBase httpRequest, HttpEntity entity) { httpRequest.setHeader("User-Agent", "okHttp"); if (httpRequest instanceof HttpEntityEnclosingRequestBase) {// checkArgument(null!=entity,"HttpEntity请求体不能为空"); ((HttpEntityEnclosingRequestBase) httpRequest).setEntity(entity); } //忽略证书 SSLContext sslContext = SSLContexts.createDefault(); X509TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException { } public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; try { sslContext.init(null, new TrustManager[]{tm}, null); } catch (Exception ex) { ex.printStackTrace(); } X509HostnameVerifier hostnameVerifier = new AllowAllHostnameVerifier(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); Registry<ConnectionSocketFactory> r = RegistryBuilder.<ConnectionSocketFactory>create() .register("https", sslsf) .build(); HttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(r); CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build(); CloseableHttpResponse response = null; String resString = null; try { response = httpClient.execute(httpRequest); HttpEntity resEntity = response.getEntity(); int statusCode = response.getStatusLine().getStatusCode(); resString = EntityUtils.toString(resEntity, "UTF-8"); System.err.println(statusCode); if (statusCode != HttpStatus.SC_OK) { System.out.println("响应码状态不是200"); } return resString; } catch (Exception e) { throw new RuntimeException(resString, e); } finally { try { if (response != null) { response.close(); } if (httpRequest != null) { httpRequest.releaseConnection(); } if (httpClient != null) { httpClient.close(); } } catch (IOException e) { throw new RuntimeException(e); } } }}
调用示例:
public static void delAll(){ String url = path+"test/test/deleteAll"; Map map = new HashMap<>(); String str = HttpClientUtils.invokePost(url,map); System.out.println("delAll.str="+str); }
到此,相信大家对“java的http请求工具类HttpClientUtils怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!