package com.ycwl.basic.service; import com.ycwl.basic.utils.HttpServiceUtil; import com.ycwl.basic.utils.SslUtil; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.StatusLine; 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.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Http请求服务 * * @author songmingsong */ @Service @Slf4j public class HttpService { /** * @param requestUrl * 请求地址 * @param params * 参数 * @param encoding * 编码 * @return String * @throws Exception * 抛出的异常新 */ public String doHttpsPost(String requestUrl, Map params, String encoding) throws Exception { String result = HttpServiceUtil.REQUEST_NO_RESULT; // build client 对象 CloseableHttpClient httpClient = null; try { httpClient = SslUtil.sslHttpClientBuild(); requestUrl = requestUrl.replaceAll("\\s*", ""); HttpPost post = new HttpPost(requestUrl); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000) .setConnectionRequestTimeout(1000).setSocketTimeout(5000).build(); post.setConfig(requestConfig); // 请求首部--可选的,User-Agent对于一些服务器必选,不加可能不会返回正确结果 post.setHeader("User-Agent", "Mozilla/5.0 (Linux; U; Android 5.0.2; zh-cn; PLK-UL00 Build/HONORPLK-UL00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025483 Mobile Safari/533.1 MicroMessenger/6.3.8.56_re6b2553.680 NetType/"); List parasList = new ArrayList(); if (null != params && params.size() > 0) { for (String key : params.keySet()) { NameValuePair param = new BasicNameValuePair(key, params.get(key)); parasList.add(param); } } // Exec Request HttpEntity paramsEntity = new UrlEncodedFormEntity(parasList, encoding); post.setEntity(paramsEntity); CloseableHttpResponse resp = httpClient.execute(post); // 获得起始行 StatusLine status = resp.getStatusLine(); // 获取实体 if (HttpServiceUtil.success(status)) { // 获取实体 HttpEntity entity = resp.getEntity(); // 编码格式 result = EntityUtils.toString(entity, encoding); // 释放实体 response.close();//关闭响应 EntityUtils.consume(entity); } } catch (Exception e) { log.error("doHttpsPost", e); throw e; } finally { if (httpClient != null) { httpClient.close(); } } return result; } public String doGet(String requestUrl, String encoding) throws Exception { String result = HttpServiceUtil.REQUEST_NO_RESULT; // build client 对象 CloseableHttpClient httpClient = null; try { httpClient = SslUtil.sslHttpClientBuild(); requestUrl = requestUrl.replaceAll("\\s*", ""); HttpGet get = new HttpGet(requestUrl); // 请求首部--可选的,User-Agent对于一些服务器必选,不加可能不会返回正确结果 get.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64;rv:39.0) Gecko/20100101 Firefox/39.0"); get.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64;rv:39.0) Gecko/20100101 Firefox/39.0"); // Exec Request CloseableHttpResponse resp = httpClient.execute(get); // 获得起始行 StatusLine status = resp.getStatusLine(); if (HttpServiceUtil.success(status)) { // 获取实体 HttpEntity entity = resp.getEntity(); // 编码格式 result = EntityUtils.toString(entity, encoding); // 释放实体 response.close();//关闭响应 EntityUtils.consume(entity); } } finally { if (httpClient != null) { httpClient.close(); } } return result; } public String doPost(String requestUrl, String jsonData, Map headers, String encoding) throws Exception { String result = HttpServiceUtil.REQUEST_NO_RESULT; // 默认返回值 CloseableHttpClient httpClient = null; try { // 使用自定义 SSL 工具类创建支持 HTTPS 的 HttpClient httpClient = SslUtil.sslHttpClientBuild(); // 清理 URL 中的空格字符 requestUrl = requestUrl.replaceAll("\\s*", ""); HttpPost post = new HttpPost(requestUrl); // 设置请求头 if (headers != null && !headers.isEmpty()) { for (Map.Entry header : headers.entrySet()) { post.setHeader(header.getKey(), header.getValue()); } } // 设置请求体 if (jsonData != null) { StringEntity entity = new StringEntity(jsonData, encoding); entity.setContentType("application/json"); post.setEntity(entity); } // 执行请求 CloseableHttpResponse response = httpClient.execute(post); // 获取响应状态码及响应数据 StatusLine status = response.getStatusLine(); if (HttpServiceUtil.success(status)) { HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, encoding); EntityUtils.consume(entity); // 确保释放资源 } response.close(); // 关闭响应对象 } finally { if (httpClient != null) { httpClient.close(); // 关闭 HttpClient } } return result; } }