From 163a0f46df9db45eb497a4b38266e781fb788cc2 Mon Sep 17 00:00:00 2001 From: admin <1782158860@qq.com> Date: Tue, 18 Oct 2022 12:00:41 +0800 Subject: [PATCH] =?UTF-8?q?httpClient=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sc545/pay/utils/HttpUtils.java | 594 ----------------------------- 1 file changed, 594 deletions(-) delete mode 100644 src/sc545/pay/utils/HttpUtils.java diff --git a/src/sc545/pay/utils/HttpUtils.java b/src/sc545/pay/utils/HttpUtils.java deleted file mode 100644 index 6922ac1..0000000 --- a/src/sc545/pay/utils/HttpUtils.java +++ /dev/null @@ -1,594 +0,0 @@ -package sc545.pay.utils; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.CookieStore; -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.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.entity.StringEntity; -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.message.BasicNameValuePair; -import org.apache.http.ssl.SSLContextBuilder; -import org.apache.http.ssl.TrustStrategy; -import org.apache.http.util.EntityUtils; - - -/** - * 基于 httpclient 4.5版本的 http工具类 - * - * - */ -public class HttpUtils { - - private static final CloseableHttpClient httpClient; - public static final String CHARSET = "UTF-8"; - // 采用静态代码块,初始化超时时间配置,再根据配置生成默认httpClient对象 - static { - //10秒相应超时 - RequestConfig config = RequestConfig.custom().setConnectTimeout(10000).setSocketTimeout(10000).setConnectionRequestTimeout(5000).build(); - httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); - } - - public static String doGet(String url, Map params) { - return doGet(url, params, CHARSET); - } - - public static String doGetSSL(String url, Map params) { - return doGetSSL(url, params, CHARSET); - } - - public static String doPost(String url, Map params){ - return doPost(url, params, CHARSET); - } - - /** - * HTTP Get 获取内容 - * @param url 请求的url地址 ?之前的地址 - * @param params 请求的参数 - * @param charset 编码格式 - * @return 页面内容 - */ - public static String doGet(String url, Map params, String charset) { - if(charset==null||charset.trim().length()<1) charset="UTF-8"; - if (StringUtils.isBlank(url)) { - return null; - } - - try { - if (params != null && !params.isEmpty()) { - List pairs = new ArrayList(params.size()); - for (Map.Entry entry : params.entrySet()) { - String value = entry.getValue(); - if (value != null) { - pairs.add(new BasicNameValuePair(entry.getKey(), value)); - } - } - // 将请求参数和url进行拼接 - url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset)); - } - HttpGet httpGet = new HttpGet(url); - CloseableHttpResponse response = httpClient.execute(httpGet); - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != 200) { - httpGet.abort(); - throw new RuntimeException("HttpClient,error status code :" + statusCode); - } - HttpEntity entity = response.getEntity(); - String result = null; - if (entity != null) { - result = EntityUtils.toString(entity, charset); - } - EntityUtils.consume(entity); - response.close(); - if(!"UTF-8".equals(getEncoding(result))) result=GBKtoUTF8(result); - - return result; - } catch (Exception e) { - System.out.println("url错误:::"+e.toString()); - e.printStackTrace(); - } - return null; - } - - - /** - * HTTP Post 获取内容 - * @param url 请求的url地址 ?之前的地址 - * @param params 请求的参数 - * @param charset 编码格式 - * @return 页面内容 - * @throws IOException - */ - public static String doPost(String url, Map params, String charset) { - if(charset==null||charset.trim().length()<1) charset="UTF-8"; - if (StringUtils.isBlank(url)) { - return null; - } - - List pairs = null; - if (params != null && !params.isEmpty()) { - pairs = new ArrayList(params.size()); - for (Map.Entry entry : params.entrySet()) { - String value = entry.getValue(); - if (value != null) { - pairs.add(new BasicNameValuePair(entry.getKey(), value)); - } - } - } - HttpPost httpPost = new HttpPost(url); - CloseableHttpResponse response = null; - try { - if (pairs != null && pairs.size() > 0) { - httpPost.setEntity(new UrlEncodedFormEntity(pairs, CHARSET)); - } - - response = httpClient.execute(httpPost); - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != 200) { - httpPost.abort(); - throw new RuntimeException("HttpClient,error status code :" + statusCode); - } - HttpEntity entity = response.getEntity(); - String result = null; - if (entity != null) { - result = EntityUtils.toString(entity, charset); - } - EntityUtils.consume(entity); - if(!"UTF-8".equals(getEncoding(result))) result=GBKtoUTF8(result); - return result; - } catch (Exception e) { - return ""; - } finally { - if (response != null) - try { - response.close(); - } catch (IOException e) {} - } - } - - /** - * HTTPS Get 获取内容 - * @param url 请求的url地址 ?之前的地址 - * @param params 请求的参数 - * @param charset 编码格式 - * @return 页面内容 - */ - public static String doGetSSL(String url, Map params, String charset) { - if(charset==null||charset.trim().length()<1) charset="UTF-8"; - if (StringUtils.isBlank(url)) { - return null; - } - - try { - if (params != null && !params.isEmpty()) { - List pairs = new ArrayList(params.size()); - for (Map.Entry entry : params.entrySet()) { - String value = entry.getValue(); - if (value != null) { - pairs.add(new BasicNameValuePair(entry.getKey(), value)); - } - } - url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset)); - } - HttpGet httpGet = new HttpGet(url); - - // https 注意这里获取https内容,使用了忽略证书的方式,当然还有其他的方式来获取https内容 - CloseableHttpClient httpsClient = HttpUtils.createSSLClientDefault(); - CloseableHttpResponse response = httpsClient.execute(httpGet); - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != 200) { - httpGet.abort(); - throw new RuntimeException("HttpClient,error status code :" + statusCode); - } - HttpEntity entity = response.getEntity(); - String result = null; - if (entity != null) { - result = EntityUtils.toString(entity, charset); - } - EntityUtils.consume(entity); - response.close(); - if(!"UTF-8".equals(getEncoding(result))) result=GBKtoUTF8(result); - return result; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - /** - * 这里创建了忽略整数验证的CloseableHttpClient对象 - * @return - */ - public static CloseableHttpClient createSSLClientDefault() { - try { - SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { - // 信任所有 - public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { - return true; - } - }).build(); - SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); - return HttpClients.custom().setSSLSocketFactory(sslsf).build(); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (KeyStoreException e) { - e.printStackTrace(); - } - return HttpClients.createDefault(); - } - - /** - * 这里创建了忽略整数验证的CloseableHttpClient对象 - * @return - */ - public static CloseableHttpClient createSSLClientCookie(CookieStore cookie) { - try { - SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { - // 信任所有 - public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { - return true; - } - }).build(); - SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); - return HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultCookieStore(cookie).build(); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (KeyStoreException e) { - e.printStackTrace(); - } - return HttpClients.createDefault(); - } - - /** - * 发送post请求 - * @param url 请求地址 - * @param json json格式字符串 - * @param contentType 这里用 "application/json" - * @return - */ - public static String post(String url, String json, String contentType,String charset) { - if(charset==null||charset.trim().length()<1) charset="UTF-8"; - if("json".equals(contentType)) contentType="application/json"; - HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); - //HttpClient - CloseableHttpClient client = httpClientBuilder.build(); - client = (CloseableHttpClient) wrapClient(client); - HttpPost post = new HttpPost(url); - try { - StringEntity s = new StringEntity(json, "utf-8"); - if (StringUtils.isBlank(contentType)) { - s.setContentType("application/json"); - } - s.setContentType(contentType); - post.setEntity(s); - HttpResponse res = client.execute(post); - HttpEntity entity = res.getEntity(); - String str = EntityUtils.toString(entity, charset); - if(!"UTF-8".equals(getEncoding(str))) str=GBKtoUTF8(str); - return str; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - - @SuppressWarnings("deprecation") - private static org.apache.http.client.HttpClient wrapClient(HttpClient base) { - try { - SSLContext ctx = SSLContext.getInstance("TLSv1"); - 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; - } - }; - ctx.init(null, new TrustManager[]{tm}, null); - SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(ctx, new String[]{"TLSv1"}, null, - SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); - CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); - return httpclient; - - } catch (Exception ex) { - return null; - } - } - - - //正则找出所有 - public static String getUrl(String s){ - String regex = "http[s]?:\\/\\/([\\w]+\\.)+[\\w]+([\\w./?%&=]*)?"; - Pattern pattern = Pattern.compile(regex); - Matcher m = pattern.matcher(s); - String r=""; - while(m.find()){ - r+=m.group()+","; - } - return r; - } - - /** - * 检查url是否可访问 - * @param url - * @return - */ - public static boolean ckUrl(String url) { - - if (StringUtils.isBlank(url)) { - return false; - } - HttpGet httpGet = new HttpGet(url); - try { - CloseableHttpResponse response = httpClient.execute(httpGet); - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != 200) return false; - } catch (Exception e) { - String s = e.getMessage(); - if("Timeout waiting for connection from pool".equals(s)) return true; - return false; - } - - return true; - } - - /**检查字符串编码格式*/ - public static String getEncoding(String str) - { - String encode; - - encode = "UTF-16"; - try - { - if(str.equals(new String(str.getBytes(), encode))) - { - return encode; - } - } - catch(Exception ex) {} - - encode = "ASCII"; - try - { - if(str.equals(new String(str.getBytes(), encode))) - { - //字符串 str 中仅由数字和英文字母组成,无法识别其编码格式 - return "UTF-8"; - } - } - catch(Exception ex) {} - - encode = "ISO-8859-1"; - try - { - if(str.equals(new String(str.getBytes(), encode))) - { - return encode; - } - } - catch(Exception ex) {} - - encode = "GB2312"; - try - { - if(str.equals(new String(str.getBytes(), encode))) - { - return encode; - } - } - catch(Exception ex) {} - - encode = "UTF-8"; - try - { - if(str.equals(new String(str.getBytes(), encode))) - { - return encode; - } - } - catch(Exception ex) {} - - /* - *......待完善 - */ - - return "UTF-8"; - } - - /**将字符串转换字符编码*/ - public static String GBKtoUTF8(String str) { - if("UTF-8".equals(getEncoding(str))) return str; - - return getUTF8StringFromGBKString(str); - - } - - public static String getUTF8StringFromGBKString(String gbkStr) { - try { - return new String(getUTF8BytesFromGBKString(gbkStr), "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new InternalError(); - } - } - - public static byte[] getUTF8BytesFromGBKString(String gbkStr) { - int n = gbkStr.length(); - byte[] utfBytes = new byte[3 * n]; - int k = 0; - for (int i = 0; i < n; i++) { - int m = gbkStr.charAt(i); - if (m < 128 && m >= 0) { - utfBytes[k++] = (byte) m; - continue; - } - utfBytes[k++] = (byte) (0xe0 | (m >> 12)); - utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f)); - utfBytes[k++] = (byte) (0x80 | (m & 0x3f)); - } - if (k < utfBytes.length) { - byte[] tmp = new byte[k]; - System.arraycopy(utfBytes, 0, tmp, 0, k); - return tmp; - } - return utfBytes; - } - - - /** - * 带有cookie和header 的post请求 - * @param url - * @param params - * @param cookie - * @param header - * @return - */ - @SuppressWarnings("rawtypes") - public static String doPost2(String url, Map params, CookieStore cookie,Map header,String charset) { - if(charset==null||charset.trim().length()<1) charset="UTF-8"; - if (StringUtils.isBlank(url)) { - return null; - } - - List pairs = null; - if (params != null && !params.isEmpty()) { - pairs = new ArrayList(params.size()); - for (Map.Entry entry : params.entrySet()) { - String value = entry.getValue(); - if (value != null) { - pairs.add(new BasicNameValuePair(entry.getKey(), value)); - } - } - } - HttpPost httpPost = new HttpPost(url); - - Set> set = header.entrySet(); - Iterator> s = set.iterator(); - while (s.hasNext()) { - Map.Entry m = (Map.Entry) s.next(); - httpPost.addHeader(m.getKey().toString(),m.getValue().toString()); - } - - CloseableHttpResponse response = null; - try { - if (pairs != null && pairs.size() > 0) { - httpPost.setEntity(new UrlEncodedFormEntity(pairs, CHARSET)); - } - - CloseableHttpClient httpClientc = HttpUtils.createSSLClientCookie(cookie); - response = httpClientc.execute(httpPost); - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != 200) { - httpPost.abort(); - throw new RuntimeException("HttpClient,error status code :" + statusCode); - } - HttpEntity entity = response.getEntity(); - String result = null; - if (entity != null) { - result = EntityUtils.toString(entity, charset); - } - EntityUtils.consume(entity); - if(!"UTF-8".equals(getEncoding(result))) result=GBKtoUTF8(result); - return result; - } catch (Exception e) { - e.printStackTrace(); - } finally { - if (response != null) - try { - response.close(); - } catch (IOException e) {e.printStackTrace();} - } - return null; - } - - @SuppressWarnings("rawtypes") - public static String doGet2(String url, Map params, CookieStore cookie,Map header,String charset) { - if(charset==null||charset.trim().length()<1) charset="UTF-8"; - if (StringUtils.isBlank(url)) { - return null; - } - - try { - if (params != null && !params.isEmpty()) { - List pairs = new ArrayList(params.size()); - for (Map.Entry entry : params.entrySet()) { - String value = entry.getValue(); - if (value != null) { - pairs.add(new BasicNameValuePair(entry.getKey(), value)); - } - } - url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset)); - } - HttpGet httpGet = new HttpGet(url); - - Set> set = header.entrySet(); - Iterator> s = set.iterator(); - while (s.hasNext()) { - Map.Entry m = (Map.Entry) s.next(); - httpGet.addHeader(m.getKey().toString(),m.getValue().toString()); - } - - // https 注意这里获取https内容,使用了忽略证书的方式,当然还有其他的方式来获取https内容 - CloseableHttpClient httpsClient = HttpUtils.createSSLClientCookie(cookie); - CloseableHttpResponse response = httpsClient.execute(httpGet); - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode != 200) { - httpGet.abort(); - throw new RuntimeException("HttpClient,error status code :" + statusCode); - } - HttpEntity entity = response.getEntity(); - String result = null; - if (entity != null) { - result = EntityUtils.toString(entity, charset); - } - EntityUtils.consume(entity); - response.close(); - if(!"UTF-8".equals(getEncoding(result))) result=GBKtoUTF8(result); - return result; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - - -}