import java.util.concurrent.TimeUnit;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.http.client.config.RequestConfig;
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.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HttpManager {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpManager.class);
public static final String HTTP_APPLICATION_JSON = "application/json";
public static final int HTTP_SUCCESS_CODE = 200;
private final CloseableHttpClient httpClient;
private synchronized CloseableHttpClient constructHttpClient(int timeout) {
if (httpClient != null) {
return httpClient;
}
long timeoutInMs = TimeUnit.SECONDS.toMillis(timeout);
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout((int) timeoutInMs)
.setSocketTimeout((int) timeoutInMs).build();
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
httpClientBuilder.setDefaultRequestConfig(requestConfig);
return httpClientBuilder.build();
}
public HttpManager(int timeout) {
httpClient = constructHttpClient(timeout);
}
public String doSentPost(String url, Object dto) {
try {
HttpPost post = getHttpPost(url);
StringEntity stringEntity = new StringEntity(toJsonStr(dto));
stringEntity.setContentType(HTTP_APPLICATION_JSON);
post.setEntity(stringEntity);
CloseableHttpResponse response = httpClient.execute(post);
String returnStr = EntityUtils.toString(response.getEntity());
if (returnStr != null && !returnStr.isEmpty()
&& response.getStatusLine().getStatusCode() == 200) {
LOGGER.info("request url {}, dto: {}, return str {}", url, dto, returnStr);
return returnStr;
}
} catch (Exception e) {
LOGGER.error("request url {}, request dto {} error :" + e.getMessage(), url, dto);
return null;
}
return null;
}
public String doSendGet(String url) {
try {
HttpGet get = getHttpGet(url);
CloseableHttpResponse response = httpClient.execute(get);
String returnStr = EntityUtils.toString(response.getEntity());
if (returnStr != null && !returnStr.isEmpty()
&& response.getStatusLine().getStatusCode() == HTTP_SUCCESS_CODE) {
return returnStr;
}
} catch (Exception e) {
LOGGER.error("request url {} error :" + e.getMessage(), url);
return null;
}
return null;
}
private HttpPost getHttpPost(String url) {
HttpPost httpPost = new HttpPost(url);
return httpPost;
}
private HttpGet getHttpGet(String url) {
HttpGet httpGet = new HttpGet(url);
return httpGet;
}
private String toJsonStr(Object obj) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
return gson.toJson(obj);
}
}