httpUtils 工具类
生活随笔
收集整理的這篇文章主要介紹了
httpUtils 工具类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?httpUtils 工具類,專門用于java端發送http請求的,可以支持get, post ,put json ,get post put form 格式的請求
允許添加不帶用戶名密碼的代理,和帶用戶名密碼的代理。
package com.xxxx;import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.NameValuePair; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.*; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicCredentialsProvider; 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.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*;public class HttpUtils {private static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);private static final String DEFAULT_UTF8_ENCODING = "UTF-8";private static final String APPLICATION_JSON = "application/json";private static final CloseableHttpClient HC;public static final int CONNECT_TIMEOUT = 60 * 1000;private static final RequestConfig defaultRc = RequestConfig.custom().setConnectionRequestTimeout(60 * 1000).setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(CONNECT_TIMEOUT).build();static {PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();cm.setMaxTotal(1024);cm.setDefaultMaxPerRoute(128);// Connection timeout is the timeout until a connection with the server is established.// ConnectionRequestTimeout used when requesting a connection from the connection manager.HC = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(defaultRc).build();}/**** @param requestUrl 訪問地址* @param method http 訪問方式* @param requestParams 請求參數* @param headers 請求頭* @param proxyHost 代理ip 不帶http://* @param proxyPort 端口* @param proxyScheme http/https* @param proxyUsername 代理用戶名* @param proxyPassword 代理密碼* @param connectTimeoutMillis* @param socketReadTimeoutMillis* @return* @throws Exception*/public static String requestFormHttp(String requestUrl, String method, Map<String, Object> requestParams,Map<String, Object> headers, String proxyHost, Integer proxyPort,String proxyScheme, String proxyUsername, String proxyPassword,int connectTimeoutMillis, int socketReadTimeoutMillis) throws Exception {HttpRequestBase httpUriRequest;List<NameValuePair> params = new ArrayList<>();if (requestParams != null) {Iterator<Map.Entry<String, Object>> it = requestParams.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, Object> en = it.next();String key = en.getKey();Object value = en.getValue();if (value != null) {params.add(new BasicNameValuePair(key, value.toString()));}}}if ("GET".equalsIgnoreCase(method)) {httpUriRequest = new HttpGet(requestUrl);} else if ("POST".equalsIgnoreCase(method)) {httpUriRequest = new HttpPost(requestUrl);if(!isEmpty(params)) {((HttpPost) httpUriRequest).setEntity(new UrlEncodedFormEntity(params, DEFAULT_UTF8_ENCODING));}} else if ("PUT".equalsIgnoreCase(method)) {httpUriRequest = new HttpPut(requestUrl);if(!isEmpty(params)) {((HttpPut) httpUriRequest).setEntity(new UrlEncodedFormEntity(params, DEFAULT_UTF8_ENCODING));}} else if ("DELETE".equalsIgnoreCase(method)) {httpUriRequest = new HttpDelete(requestUrl);} else {throw new RuntimeException("method " + method + " is not support");}//附加參數中的header到http request中if (headers != null) {Iterator<Map.Entry<String, Object>> itHeaders = headers.entrySet().iterator();while (itHeaders.hasNext()) {Map.Entry<String, Object> en = itHeaders.next();String key = en.getKey();Object value = en.getValue();if (value != null) {httpUriRequest.setHeader(key, value.toString());}}}return requestByProxy(httpUriRequest, proxyHost, proxyPort, proxyScheme, proxyUsername, proxyPassword, connectTimeoutMillis, socketReadTimeoutMillis);}private static String requestByProxy(HttpRequestBase httpUriRequest, String proxyHost, Integer proxyPort,String proxyScheme, String proxyUsername, String proxyPassword,int connectTimeoutMillis, int socketReadTimeoutMillis) {String result = null;HttpClientContext context = HttpClientContext.create();//把代理設置到請求配置RequestConfig defaultRequestConfig = buildRequestConfig(proxyHost, proxyPort, proxyScheme,connectTimeoutMillis, socketReadTimeoutMillis);if (StringUtils.isNotBlank(proxyUsername)) {HttpHost proxy = new HttpHost(proxyHost, proxyPort, proxyScheme);// 設置認證CredentialsProvider provider = new BasicCredentialsProvider();provider.setCredentials(new AuthScope(proxy), new UsernamePasswordCredentials(proxyUsername,proxyPassword));context.setCredentialsProvider(provider);}httpUriRequest.setConfig(defaultRequestConfig);HttpEntity httpEntity = null;try (CloseableHttpResponse httpResponse = HC.execute(httpUriRequest, context)) {/** HttpResponse */httpEntity = httpResponse.getEntity();result = httpEntity != null ? EntityUtils.toString(httpEntity, DEFAULT_UTF8_ENCODING) : null;} catch (Exception e) {try {EntityUtils.consume(httpEntity);} catch (IOException ioException) {logger.error("http entity error", e);}throw new RuntimeException(e);}return result;}private static RequestConfig buildRequestConfig(String proxyHost, Integer proxyPort, String proxyScheme, int connectTimeoutMillis, int socketReadTimeoutMillis) {if (StringUtils.isNotBlank(proxyHost)) {HttpHost proxy = new HttpHost(proxyHost, proxyPort, proxyScheme);return RequestConfig.custom().setConnectionRequestTimeout(connectTimeoutMillis).setConnectTimeout(connectTimeoutMillis).setSocketTimeout(socketReadTimeoutMillis).setProxy(proxy).build();} else {return RequestConfig.custom().setConnectionRequestTimeout(connectTimeoutMillis).setConnectTimeout(connectTimeoutMillis).setSocketTimeout(socketReadTimeoutMillis).build();}}/*** @param requestUrl 請求地址* @param method 請求方法* @param requestJson 請求參數* @param headers 請求頭* @param proxyHost 代理地址* @param proxyPort 代理端口* @param proxyScheme http/https* @param proxyUsername 代理用戶名* @param proxyPassword 代理秘密* @param connectTimeoutMillis* @param socketReadTimeoutMillis* @return* @throws Exception*/public static String requestJsonHttp(String requestUrl, String method, String requestJson,Map<String, String> headers, String proxyHost, Integer proxyPort,String proxyScheme, String proxyUsername, String proxyPassword,int connectTimeoutMillis, int socketReadTimeoutMillis) throws Exception {HttpRequestBase httpUriRequest;if ("GET".equalsIgnoreCase(method)) {httpUriRequest = new HttpGet(requestUrl);} else if ("POST".equalsIgnoreCase(method)) {httpUriRequest = new HttpPost(requestUrl);if (StringUtils.isNotBlank(requestJson)) {((HttpPost) httpUriRequest).setEntity(new StringEntity(requestJson, StandardCharsets.UTF_8));}} else if ("PUT".equalsIgnoreCase(method)) {httpUriRequest = new HttpPut(requestUrl);if (StringUtils.isNotBlank(requestJson)) {((HttpPut) httpUriRequest).setEntity(new StringEntity(requestJson, StandardCharsets.UTF_8));}} else {throw new RuntimeException("method " + method + " is not support");}httpUriRequest.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);//如果有特殊的Headerif (!isEmpty(headers)) {headers.forEach(httpUriRequest::addHeader);}return requestByProxy(httpUriRequest, proxyHost, proxyPort, proxyScheme, proxyUsername, proxyPassword, connectTimeoutMillis, socketReadTimeoutMillis);}private static <C> boolean isEmpty(Collection<C> c) {return c == null || c.size() == 0;}private static <K,V> boolean isEmpty(Map<K,V> m) {return m == null || m.size() == 0;} }?
總結
以上是生活随笔為你收集整理的httpUtils 工具类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rdkit 修改分子
- 下一篇: 项目管理学习总结(11)——项目管理怎么