httpclient是apache的一个高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。我使用的是httpclient 4.2.5的版本,maven依赖如下:
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.2.5</version>
</dependency>
然后增加两个pojo类,用于存放http请求与响应:
public class HttpRequest {
private String url;
private String body;
public HttpRequest(String url, String body) {
super();
this.url = url;
this.body = body;
}
public HttpRequest(String url) {
super();
this.url = url;
}
public HttpRequest() {
// TODO Auto-generated constructor stub
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
@Override
public String toString() {
return "HttpRequest [url=" + url + ", body=" + body + "]";
}
}
public class HttpResponse {
private int statusCode;
private String body;
public int getStatusCode() {
return statusCode;
}
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
@Override
public String toString() {
return "HttpResponse [statusCode=" + statusCode + ", body=" + body + "]";
}
}
然后基于httpclient写一个http的支持get,post类,post方法是采用json格式传输
public class Http {
public HttpResponse get(HttpRequest req) {
HttpResponse response = new HttpResponse();
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(req.getUrl());
org.apache.http.HttpResponse httpResponse = httpClient.execute(httpGet);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if(HttpStatus.SC_OK != statusCode) {
throw new HttpException(statusCode);
} else {
response.setStatusCode(statusCode);
response.setBody(EntityUtils.toString(httpResponse.getEntity()));
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
public HttpResponse post(HttpRequest req) {
HttpResponse res = new HttpResponse();
try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000);
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 2000);
HttpPost post = new HttpPost(req.getUrl());
for (String key : GlobalConfig.HEAD_FINAL_MAP.keySet()) {
post.setHeader(key, GlobalConfig.HEAD_FINAL_MAP.get(key));
}
StringEntity body = new StringEntity(req.getBody(), Charset.forName("UTF-8"));
body.setContentEncoding("UTF-8");
body.setContentType("application/json");
post.setEntity(body);
org.apache.http.HttpResponse httpResponse = httpClient.execute(post);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if(HttpStatus.SC_OK != statusCode) {
throw new HttpException(statusCode);
} else {
res.setStatusCode(statusCode);
res.setBody(EntityUtils.toString(httpResponse.getEntity()));
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}