HttpClient发送请求
最近做项目,需要用到HttpClient,就花了点时间封装了下,不足还望指点。
核心服务
package com.hollysys.tn.util;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
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.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.CharArrayBuffer;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import javax.net.ssl.SSLContext;
@Component
public class HttpClient {
public static final Log log = LogFactory.getLog(HttpClient.class);
public static HttpResponse sendPost(HttpRequest request) {
HttpResponse result = new HttpResponse();
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(request.getUrl());
CloseableHttpResponse response = null;
try {
post.setEntity(new ByteArrayEntity(request.getParam().getBytes("UTF-8")));
post.setHeader("Cookie", request.getCookie());
post.setHeader("Content-Type", request.getContentType());
post.setHeader("charset", request.getCharset());
response = httpClient.execute(post);
if (response != null && response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
result.setData(entityToString(entity, request.getResponseCharset()));
} else {
String s = response.getStatusLine().toString();
result.setMsg(s);
}
log.info("result:" + JSON.toJSONString(result));
return result;
} catch (Exception e) {
log.error(e.getMessage(), e);
result.setCode(500);
result.setMsg(e.getMessage());
return result;
} finally {
try {
httpClient.close();
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static HttpResponse sendGet(HttpRequest request) {
long start = System.currentTimeMillis();
HttpResponse result = new HttpResponse();
// CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpClient httpClient = null;
HttpGet get = new HttpGet(request.getUrl());
get.setHeader("Cookie", request.getCookie());
get.setHeader("Content-Type", request.getContentType());
get.setHeader("charset", request.getCharset());
CloseableHttpResponse response = null;
TrustStrategy acceptingTrustStrategy = new TrustSelfSignedStrategy();
try {
SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy)
.build();
SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
httpClient = HttpClients.custom().setSSLSocketFactory(csf).build();
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e1) {
e1.printStackTrace();
}
try {
response = httpClient.execute(get);
if (response != null && response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
Header lastHeader = response.getLastHeader("Set-Cookie");
if (lastHeader != null) {
result.setCookieHeader(lastHeader.getValue());
}
result.setCode(response.getStatusLine().getStatusCode());
result.setData(entityToString(entity, request.getResponseCharset()));
} else {
String s = response.getStatusLine().toString();
result.setMsg(s);
result.setCode(response.getStatusLine().getStatusCode());
}
log.info("result:" + JSON.toJSONString(result));
long end = System.currentTimeMillis();
log.info("result:" + (end - start) + "ms");
return result;
} catch (Exception e) {
log.error("error:" + e.getMessage(), e);
result.setCode(500);
result.setMsg(e.getMessage());
return result;
} finally {
try {
httpClient.close();
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static String entityToString(HttpEntity entity, String responseCharset) throws IOException {
String result = null;
if (entity != null) {
long lenth = entity.getContentLength();
if (lenth != -1 && lenth < 2048) {
result = EntityUtils.toString(entity, responseCharset);
} else {
InputStreamReader reader1 = new InputStreamReader(entity.getContent(), responseCharset);
CharArrayBuffer buffer = new CharArrayBuffer(2048);
char[] tmp = new char[1024];
int l;
while ((l = reader1.read(tmp)) != -1) {
buffer.append(tmp, 0, l);
}
result = buffer.toString();
}
}
return result;
}
}
调用实列
package com.hollysys.tn;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.hollysys.tn.entity.Detail;
import com.hollysys.tn.entity.Device;
import com.hollysys.tn.entity.DeviceLotTime;
import com.hollysys.tn.entity.Lot;
import com.hollysys.tn.entity.ProductDetail;
import com.hollysys.tn.entity.ProductLine;
import com.hollysys.tn.entity.ProductYield;
import com.hollysys.tn.service.IndexMethodService;
import com.hollysys.tn.service.LotService;
import com.hollysys.tn.service.ProductDetailService;
import com.hollysys.tn.service.ProductLineService;
import com.hollysys.tn.service.ProductYieldService;
import com.hollysys.tn.util.DateUtil;
import com.hollysys.tn.util.HttpClient;
import com.hollysys.tn.util.HttpRequest;
import com.hollysys.tn.util.HttpResponse;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TNmedicineApplication.class)
public class TNmedicineApplicationTests {
private static String url = "https://*****:8182/scada/v1/ua/model/node/rtdb/ns=100%3Bs=AI_001_001.PV";
@Test
public void testHttpClient(){
HttpClient httpClient = new HttpClient();
HttpRequest httpRequest = new HttpRequest();
httpRequest.setUrl(url);
HttpResponse httpResponse = httpClient.sendGet(httpRequest);
}
}