|
@ -0,0 +1,299 @@
|
|
|
|
package com.yihu.hos.http;
|
|
|
|
|
|
|
|
import org.apache.commons.logging.Log;
|
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
import org.apache.http.Consts;
|
|
|
|
import org.apache.http.HttpEntity;
|
|
|
|
import org.apache.http.NameValuePair;
|
|
|
|
import org.apache.http.auth.AuthScope;
|
|
|
|
import org.apache.http.client.CredentialsProvider;
|
|
|
|
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.ContentType;
|
|
|
|
import org.apache.http.entity.FileEntity;
|
|
|
|
import org.apache.http.impl.client.BasicCredentialsProvider;
|
|
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
|
import org.apache.http.message.BasicNameValuePair;
|
|
|
|
import org.apache.http.util.EntityUtils;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
import java.net.MalformedURLException;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.net.URLEncoder;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @created Airhead 2016/8/24.
|
|
|
|
*/
|
|
|
|
public class HTTPClientDefaultImpl implements HTTPClient {
|
|
|
|
private static final Log log = LogFactory.getLog(HTTPClientDefaultImpl.class);
|
|
|
|
|
|
|
|
protected CloseableHttpClient httpClient;
|
|
|
|
protected HttpClientContext httpClientContext;
|
|
|
|
|
|
|
|
HTTPClientDefaultImpl(CloseableHttpClient httpClient, CredentialsProvider credentialsProvider) {
|
|
|
|
this.httpClient = httpClient;
|
|
|
|
if (credentialsProvider != null) {
|
|
|
|
this.httpClientContext = HttpClientContext.create();
|
|
|
|
httpClientContext.setCredentialsProvider(credentialsProvider);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse get(String url) {
|
|
|
|
return get(url, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse get(String url, Map<String, String> params) {
|
|
|
|
return get(url, params, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse get(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
|
CloseableHttpResponse response;
|
|
|
|
HttpEntity entity = null;
|
|
|
|
try {
|
|
|
|
HttpGet httpGet = new HttpGet(formatURL(url, params));
|
|
|
|
authenticate(url, httpClientContext);
|
|
|
|
addHeads(httpGet, headers);
|
|
|
|
|
|
|
|
response = httpClient.execute(httpGet, httpClientContext);
|
|
|
|
entity = response.getEntity();
|
|
|
|
|
|
|
|
return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
} finally {
|
|
|
|
try {
|
|
|
|
EntityUtils.consume(entity);
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return new HTTPResponse(500, "");
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse post(String url) {
|
|
|
|
return post(url, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse post(String url, Map<String, String> params) {
|
|
|
|
return post(url, params, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse post(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
|
CloseableHttpResponse response;
|
|
|
|
HttpEntity entity = null;
|
|
|
|
try {
|
|
|
|
HttpPost httpPost = new HttpPost(url);
|
|
|
|
authenticate(url, httpClientContext);
|
|
|
|
addHeads(httpPost, headers);
|
|
|
|
setEntity(httpPost, params);
|
|
|
|
|
|
|
|
response = httpClient.execute(httpPost, httpClientContext);
|
|
|
|
entity = response.getEntity();
|
|
|
|
|
|
|
|
return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
} finally {
|
|
|
|
try {
|
|
|
|
EntityUtils.consume(entity);
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return new HTTPResponse(500, "");
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse postFile(String url, String path) {
|
|
|
|
return postFile(url, path, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse postFile(String url, String path, Map<String, String> params) {
|
|
|
|
return postFile(url, path, params, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse postFile(String url, String path, Map<String, String> params, Map<String, String> headers) {
|
|
|
|
CloseableHttpResponse response;
|
|
|
|
HttpEntity entity = null;
|
|
|
|
try {
|
|
|
|
HttpPost httpPost = new HttpPost(url);
|
|
|
|
authenticate(url, httpClientContext);
|
|
|
|
addHeads(httpPost, headers);
|
|
|
|
|
|
|
|
File file = new File(path);
|
|
|
|
FileEntity fileEntity = new FileEntity(file, ContentType.create("text/plain", "UTF-8"));
|
|
|
|
|
|
|
|
httpPost.setEntity(fileEntity);
|
|
|
|
|
|
|
|
response = httpClient.execute(httpPost, httpClientContext);
|
|
|
|
entity = response.getEntity();
|
|
|
|
|
|
|
|
return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
} finally {
|
|
|
|
try {
|
|
|
|
EntityUtils.consume(entity);
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return new HTTPResponse(500, "");
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse put(String url) {
|
|
|
|
return put(url, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse put(String url, Map<String, String> params) {
|
|
|
|
return put(url, params, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse put(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
|
CloseableHttpResponse response;
|
|
|
|
HttpEntity entity = null;
|
|
|
|
try {
|
|
|
|
HttpPut httpPut = new HttpPut(url);
|
|
|
|
authenticate(url, httpClientContext);
|
|
|
|
addHeads(httpPut, headers);
|
|
|
|
setEntity(httpPut, params);
|
|
|
|
|
|
|
|
response = httpClient.execute(httpPut, httpClientContext);
|
|
|
|
entity = response.getEntity();
|
|
|
|
|
|
|
|
return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
} finally {
|
|
|
|
try {
|
|
|
|
EntityUtils.consume(entity);
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return new HTTPResponse(500, "");
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse delete(String url) {
|
|
|
|
return delete(url, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse delete(String url, Map<String, String> params) {
|
|
|
|
return delete(url, params, null);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse delete(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
|
CloseableHttpResponse response;
|
|
|
|
HttpEntity entity = null;
|
|
|
|
try {
|
|
|
|
HttpDelete httpDelete = new HttpDelete(formatURL(url, params));
|
|
|
|
authenticate(url, httpClientContext);
|
|
|
|
addHeads(httpDelete, headers);
|
|
|
|
|
|
|
|
response = httpClient.execute(httpDelete, httpClientContext);
|
|
|
|
entity = response.getEntity();
|
|
|
|
|
|
|
|
return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
} finally {
|
|
|
|
try {
|
|
|
|
EntityUtils.consume(entity);
|
|
|
|
} catch (IOException ex) {
|
|
|
|
log.error(ex.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return new HTTPResponse(500, "");
|
|
|
|
}
|
|
|
|
|
|
|
|
public HTTPResponse request(String method, String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
|
if (method.equals(POST)) {
|
|
|
|
return post(url, params, headers);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (method.equals(GET)) {
|
|
|
|
return get(url, params, headers);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (method.equals(PUT)) {
|
|
|
|
return put(url, params, headers);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (method.equals(DELETE)) {
|
|
|
|
return delete(url, params, headers);
|
|
|
|
}
|
|
|
|
|
|
|
|
return get(url, params, headers);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void addHeads(HttpRequestBase httpRequestBase, Map<String, String> headers) {
|
|
|
|
if (headers == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
headers.forEach(httpRequestBase::addHeader);
|
|
|
|
}
|
|
|
|
|
|
|
|
private String formatURL(String url, Map<String, String> params) {
|
|
|
|
if (params == null) {
|
|
|
|
return url;
|
|
|
|
}
|
|
|
|
|
|
|
|
final String[] query = {""};
|
|
|
|
params.forEach((name, value) -> {
|
|
|
|
try {
|
|
|
|
query[0] += "&" + name + URLEncoder.encode(value, "UTF-8");
|
|
|
|
} catch (UnsupportedEncodingException e) {
|
|
|
|
throw new RuntimeException("encode url ");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (url.contains("?")) {
|
|
|
|
return url + query[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
return url + "?" + query[0].substring(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void authenticate(String url, HttpClientContext httpClientContext) throws MalformedURLException {
|
|
|
|
URL r = new URL(url);
|
|
|
|
String userInfo = r.getUserInfo();
|
|
|
|
if (userInfo == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
String[] user = userInfo.split(":");
|
|
|
|
String host = r.getHost();
|
|
|
|
int port = r.getPort();
|
|
|
|
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
|
|
|
|
credentialsProvider.setCredentials(new AuthScope(host, port),
|
|
|
|
new org.apache.http.auth.UsernamePasswordCredentials(user[0], user[1]));
|
|
|
|
if (httpClientContext == null) {
|
|
|
|
httpClientContext = HttpClientContext.create();
|
|
|
|
}
|
|
|
|
|
|
|
|
httpClientContext.setCredentialsProvider(credentialsProvider);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void setEntity(HttpEntityEnclosingRequestBase httpEntityEnclosingRequestBase, Map<String, String> params) {
|
|
|
|
if (params == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
List<NameValuePair> nameValuePairs = new ArrayList<>();
|
|
|
|
params.forEach((name, value) -> nameValuePairs.add(new BasicNameValuePair(name, value)));
|
|
|
|
|
|
|
|
UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
|
|
|
|
httpEntityEnclosingRequestBase.setEntity(postEntity);
|
|
|
|
}
|
|
|
|
}
|