가 져 오 는 데 사용 할 httputil 도구 클래스
17884 단어 개발 중인 문제
package com.cnlive.shenhe.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
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.config.RequestConfig.Builder;
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.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
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.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.UnsupportedCharsetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* http
*
* @author liujiong
*/
public class HttpUtil {
private Logger logger = LoggerFactory.getLogger(HttpUtil.class);
private static PoolingHttpClientConnectionManager pcm;//httpclient
private CloseableHttpClient httpClient = null; //http
private int connectTimeout = 120000;//
private int connectionRequestTimeout = 10000;//
private int socketTimeout = 300000;//
private String charset = "utf-8";
private RequestConfig requestConfig = null;//
private Builder requestConfigBuilder = null;//build requestConfig
private List nvps = new ArrayList<>();
private List headers = new ArrayList<>();
private String requestParam = "";
static {
pcm = new PoolingHttpClientConnectionManager();
pcm.setMaxTotal(50);//
pcm.setDefaultMaxPerRoute(50);// , 2
}
/**
*
*
* @author Liu Jiong
* @createDate 2016 10 30
*/
private static HttpUtil defaultInit() {
HttpUtil httpUtil = new HttpUtil();
if (httpUtil.requestConfig == null) {
httpUtil.requestConfigBuilder = RequestConfig.custom().setConnectTimeout(httpUtil.connectTimeout)
.setConnectionRequestTimeout(httpUtil.connectionRequestTimeout)
.setSocketTimeout(httpUtil.socketTimeout);
httpUtil.requestConfig = httpUtil.requestConfigBuilder.build();
}
return httpUtil;
}
/**
* httpUtil
*/
public static HttpUtil init() {
HttpUtil httpUtil = defaultInit();
if (httpUtil.httpClient == null) {
httpUtil.httpClient = HttpClients.custom().setConnectionManager(pcm).build();
}
return httpUtil;
}
/**
* httpUtil
*/
public static HttpUtil init(Map paramMap) {
HttpUtil httpUtil = init();
httpUtil.setParamMap(paramMap);
return httpUtil;
}
/**
*
*/
public static HttpUtil initWithAuth(String ip, int port, String username, String password) {
HttpUtil httpUtil = defaultInit();
if (httpUtil.httpClient == null) {
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(ip, port, AuthScope.ANY_REALM), new UsernamePasswordCredentials(username, password));
httpUtil.httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider)
.setConnectionManager(pcm).build();
}
return httpUtil;
}
/**
*
*/
public HttpUtil setHeader(String name, String value) {
Header header = new BasicHeader(name, value);
headers.add(header);
return this;
}
/**
*
*/
public HttpUtil setHeaderMap(Map headerMap) {
for (Entry param : headerMap.entrySet()) {
Header header = new BasicHeader(param.getKey(), param.getValue());
headers.add(header);
}
return this;
}
/**
*
*/
public HttpUtil setParam(String name, String value) {
nvps.add(new BasicNameValuePair(name, value));
return this;
}
/**
*
*/
public HttpUtil setParamMap(Map paramMap) {
for (Entry param : paramMap.entrySet()) {
nvps.add(new BasicNameValuePair(param.getKey(), param.getValue()));
}
return this;
}
/**
*
*/
public HttpUtil setStringParam(String requestParam) {
this.requestParam = requestParam;
return this;
}
/**
*
*/
public HttpUtil setConnectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
this.requestConfigBuilder = requestConfigBuilder.setConnectTimeout(connectTimeout);
requestConfig = requestConfigBuilder.build();
return this;
}
/**
* http get
*/
public Map get(String url) {
Map resultMap = new HashMap<>();
// URI
URI uri = getUri(url);
if (uri != null) {
HttpGet httpGet = new HttpGet(uri);
httpGet.setConfig(requestConfig);
if (!CollectionUtils.isEmpty(headers)) {
Header[] header = new Header[headers.size()];
httpGet.setHeaders(headers.toArray(header));
}
// get
try {
CloseableHttpResponse response = httpClient.execute(httpGet);
return getHttpResult(response, url, httpGet, resultMap);
} catch (Exception e) {
httpGet.abort();
resultMap.put("result", e.getMessage());
logger.error(" http GET url======" + url, e);
}
}
return resultMap;
}
/**
* http post
*/
public Map post(String url) {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
if (!CollectionUtils.isEmpty(headers)) {
Header[] header = new Header[headers.size()];
httpPost.setHeaders(headers.toArray(header));
}
if (!CollectionUtils.isEmpty(nvps)) {
try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps, charset));
} catch (UnsupportedEncodingException e) {
logger.error("http post entity form error", e);
}
}
if (!StringUtils.isEmpty(requestParam)) {
try {
httpPost.setEntity(new StringEntity(requestParam, charset));
} catch (UnsupportedCharsetException e) {
logger.error("http post entity form error", e);
}
}
Map resultMap = new HashMap<>();
// post
try {
CloseableHttpResponse response = httpClient.execute(httpPost);
return getHttpResult(response, url, httpPost, resultMap);
} catch (Exception e) {
httpPost.abort();
resultMap.put("result", e.getMessage());
logger.error(" http POST url======" + url, e);
}
return resultMap;
}
/**
* post
*/
public Map postUploadFile(String url, Map fileParam) {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
if (!CollectionUtils.isEmpty(headers)) {
Header[] header = new Header[headers.size()];
httpPost.setHeaders(headers.toArray(header));
}
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
if (fileParam != null) {
for (Entry entry : fileParam.entrySet()) {
//
FileBody fileBody = new FileBody(entry.getValue());
//
builder.addPart(entry.getKey(), fileBody);
}
}
if (!CollectionUtils.isEmpty(nvps)) {
for (NameValuePair nvp : nvps) {
String value = nvp.getValue();
if (!StringUtils.isEmpty(value)) {
builder.addTextBody(nvp.getName(), value, ContentType.create("text/plain", charset));
}
}
}
httpPost.setEntity(builder.build());
Map resultMap = new HashMap<>();
// post
try {
CloseableHttpResponse response = httpClient.execute(httpPost);
return getHttpResult(response, url, httpPost, resultMap);
} catch (Exception e) {
httpPost.abort();
resultMap.put("result", e.getMessage());
logger.error(" http postUploadFile url======" + url, e);
}
return resultMap;
}
/**
*
*/
private Map getHttpResult(CloseableHttpResponse response, String url, HttpUriRequest request, Map resultMap) {
String result = "";
int statusCode = response.getStatusLine().getStatusCode();
resultMap.put("statusCode", statusCode + "");
HttpEntity entity = response.getEntity();
if (entity != null) {
try {
result = EntityUtils.toString(entity, charset);
EntityUtils.consume(entity);//
} catch (Exception e) {
logger.error(" http ", e);
request.abort();
}
}
if (statusCode != 200) {
result = "HttpClient status code :" + statusCode + " request url===" + url;
logger.info("HttpClient status code :" + statusCode + " request url===" + url);
request.abort();
}
resultMap.put("result", result);
return resultMap;
}
/**
* url location
*/
public String redirectLocation(String url) {
String location = "";
// URI
URI uri = getUri(url);
if (uri != null) {
HttpGet httpGet = new HttpGet(uri);
requestConfig = requestConfigBuilder.setRedirectsEnabled(false).build();// false
httpGet.setConfig(requestConfig);
if (!CollectionUtils.isEmpty(headers)) {
Header[] header = new Header[headers.size()];
httpGet.setHeaders(headers.toArray(header));
}
try {
// get
CloseableHttpResponse response = httpClient.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {//301 302
Header header = response.getFirstHeader("Location");
if (header != null) {
location = header.getValue();
}
}
HttpEntity entity = response.getEntity();
if (entity != null) {
EntityUtils.consume(entity);
}
} catch (Exception e) {
logger.error(" http GET 302 Location url======" + url, e);
httpGet.abort();
}
}
return location;
}
/**
*
*/
public InputStream getInputStream(String url) {
// URI
URI uri = getUri(url);
if (uri != null) {
HttpGet httpGet = new HttpGet(uri);
httpGet.setConfig(requestConfig);
if (!CollectionUtils.isEmpty(headers)) {
Header[] header = new Header[headers.size()];
httpGet.setHeaders(headers.toArray(header));
}
// get
try {
CloseableHttpResponse response = httpClient.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200) {
logger.info("HttpClient status code :" + statusCode + " request url===" + url);
httpGet.abort();
} else {
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream in = entity.getContent();
return in;
}
}
} catch (Exception e) {
logger.error(" http GET inputStream url======" + url, e);
httpGet.abort();
}
}
return null;
}
private URI getUri(String url) {
URI uri = null;
try {
URIBuilder uriBuilder = new URIBuilder(url);
if (!CollectionUtils.isEmpty(nvps)) {
uriBuilder.setParameters(nvps);
}
uri = uriBuilder.build();
} catch (URISyntaxException e) {
logger.error("url ", e);
}
return uri;
}
/**
* from
* @param url
* @param params
* @return
*/
public static String form(String url, Map params) {
URL u = null;
HttpURLConnection con = null;
//
StringBuffer sb = new StringBuffer();
if (params != null) {
for (Entry e : params.entrySet()) {
sb.append(e.getKey());
sb.append("=");
sb.append(e.getValue());
sb.append("&");
}
sb.substring(0, sb.length() - 1);
}
//
try {
u = new URL(url);
con = (HttpURLConnection) u.openConnection();
//// POST , ,post
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
osw.write(sb.toString());
osw.flush();
osw.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (con != null) {
con.disconnect();
}
}
//
StringBuffer buffer = new StringBuffer();
try {
// , server 。
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String temp;
while ((temp = br.readLine()) != null) {
buffer.append(temp);
buffer.append("
");
}
} catch (Exception e) {
e.printStackTrace();
}
return buffer.toString();
}
public static void main(String[] args) {
/*Map map = new HashMap<>();
JSONObject param = new JSONObject();
param.put("activity_id","60:video:comets:10011#2");
param.put("state",3);
param.put("attr_tags","");
param.put("msg","");
map.put("param",param.toJSONString());
String form = form("http://yp5ntd.natappfree.cc/CnInteraction/services/commentForHd/auditCallBackNew", map);
System.out.println(form);*/
JSONObject params = new JSONObject();
params.put("video_id","60_8be004799c424688949704814ea0d16d");
params.put("state",3+"");
params.put("attr_tags","");
params.put("msg","");
HttpUtil httpUtil = HttpUtil.init();
httpUtil.setParam("param",params.toJSONString());
String URL ="http://abcd.com/v1/ShenHeInfo/shenheNotify?platform=AUDIT&token=94cead75c";
Map post = httpUtil.post(URL);
System.out.println(post.get("result"));
}
}