本篇内容主要讲解“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() { } /** * @param url * @param params * @param encode * @param connectTimeout * @param readTimeout * @return */ 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; } /** * @param requestUrl * @param params * @return */ 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); } /** * @param requestUrl * @param requestHeader * @param requestBody * @return */ 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); } /** * @param requestUrl * @param params * @param requestHeader * @param requestBody * @param encode * @param connectTimeout * @param readTimeout * @return */ 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; } /** * @param httpPost * @param params * @param requestBody * @param encode */ 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); } } /** * @param httpRequestBase * @param encode * @return */ 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; } /** * @param url * @param params * @return * @throws UnsupportedEncodingException */ 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) { } } /** * @param httpRequest * @param entity * @param * @return */ 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怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。