Ps:CDSpace工具。
Ps:发送个get和post请求的5个步骤。
// pom.xml
junit
junit
3.8.1
test
log4j
log4j
1.2.17
org.apache.httpcomponents
httpclient
4.5.2
org.apache.commons
commons-io
1.3.2
package com.imooc.MRAutoSpace.model.http;
import java.util.Map;
import org.apache.http.client.methods.HttpUriRequest;
public class HttpClientRequest {
private String url;
// private HttpUriRequest httpMethod;
private Map headers;
private String body;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
// public HttpUriRequest getHttpMethod() {
// return httpMethod;
// }
//
// public void setHttpMethod(HttpUriRequest httpMethod) {
// this.httpMethod = httpMethod;
// }
public Map getHeaders() {
return headers;
}
public void setHeaders(Map headers) {
this.headers = headers;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
package com.imooc.MRAutoSpace.model.http;
import java.util.Map;
public class HttpClientResponse {
private String statusCode;
private Map headers;
private String body;
public String getStatusCode() {
return statusCode;
}
public void setStatusCode(String statusCode) {
this.statusCode = statusCode;
}
public Map getHeaders() {
return headers;
}
public void setHeaders(Map headers) {
this.headers = headers;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
package com.imooc.MRAutoSpace.uitls.http;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.log4j.Logger;
import com.imooc.MRAutoSpace.model.http.HttpClientRequest;
import com.imooc.MRAutoSpace.model.http.HttpClientResponse;
public class HttpClientUtil {
private static Logger logger = Logger.getLogger(HttpClientUtil.class);
private CloseableHttpClient httpClient;
public static HttpClientResponse doGet(HttpClientRequest httpClientRequest) {
HttpClientUtil httpClientUtil = new HttpClientUtil();
httpClientUtil.init();
HttpGet httpGet = new HttpGet(httpClientRequest.getUrl());
return httpClientUtil.sendRequest(httpGet, httpClientRequest);
}
public static HttpClientResponse doPost(HttpClientRequest httpClientRequest) {
HttpClientUtil httpClientUtil = new HttpClientUtil();
httpClientUtil.init();
HttpPost httpPost = new HttpPost(httpClientRequest.getUrl());
return httpClientUtil.sendRequest(httpPost, httpClientRequest);
}
public static HttpClientResponse doDelete(HttpClientRequest httpClientRequest) {
HttpClientUtil httpClientUtil = new HttpClientUtil();
httpClientUtil.init();
HttpDelete httpDelete = new HttpDelete(httpClientRequest.getUrl());
return httpClientUtil.sendRequest(httpDelete, httpClientRequest);
}
public static HttpClientResponse doPut(HttpClientRequest httpClientRequest) {
HttpClientUtil httpClientUtil = new HttpClientUtil();
httpClientUtil.init();
HttpPut httpPut = new HttpPut(httpClientRequest.getUrl());
return httpClientUtil.sendRequest(httpPut, httpClientRequest);
}
private void init() {
httpClient = HttpClientBuilder.create().build();
logger.info("Start init http connection.");
}
private HttpClientResponse sendRequest(HttpRequestBase httpRequestBase, HttpClientRequest httpClientRequest) {
HttpClientResponse httpClientResponse = new HttpClientResponse();
String encodingOfBody = "ISO-8859-1";
Map requestHeaders = httpClientRequest.getHeaders();
for ( String key : requestHeaders.keySet()) {
httpRequestBase.setHeader(key, requestHeaders.get(key));
if (key.toLowerCase().equals("content-type")) {
String contentType = requestHeaders.get(key);
if ( contentType.split(";").length >= 2 ) {
encodingOfBody = contentType.split(";")[1].split("=")[1];
}
}
}
if ( httpRequestBase instanceof HttpEntityEnclosingRequestBase ) {
((HttpEntityEnclosingRequestBase) httpRequestBase).setEntity(new StringEntity(httpClientRequest.getBody(), encodingOfBody));
}
try {
CloseableHttpResponse response = httpClient.execute(httpRequestBase);
String statusCode = response.getStatusLine().toString().split(" ")[1];
logger.info(statusCode);
httpClientResponse.setStatusCode(statusCode);
Header[] headers = response.getAllHeaders();
Map responseHeaders = new HashMap();
for (Header header : headers) {
logger.info(header.getName() + ": " + header.getValue());
responseHeaders.put(header.getName(), header.getValue());
}
httpClientResponse.setHeaders(responseHeaders);
HttpEntity entity = response.getEntity();
String body = IOUtils.toString(entity.getContent());
logger.info(body);
httpClientResponse.setBody(body);
this.close();
} catch (ClientProtocolException e) {
logger.error("This http protocol is not supported.");
logger.error(e.getMessage());
} catch (IOException e) {
logger.error(e.getMessage());
}
return httpClientResponse;
}
private void close() {
try {
httpClient.close();
logger.info("Close http connection successfully!");
} catch (IOException e) {
logger.error("Close http connction failed.");
logger.error(e.getMessage());
}
}
public String formatUrl(String url, Map queryParams) {
String result = "";
String params = "";
for (String key : queryParams.keySet()) {
params += (key + "=" + queryParams.get(key) + "&");
}
result += (url + "?" + params.substring(0, params.length() - 1));
return result;
}
public CloseableHttpClient getHttpClient() {
return httpClient;
}
public void setHttpClient(CloseableHttpClient httpClient) {
this.httpClient = httpClient;
}
}
package com.imooc.MRAutoSpace.http;
import java.util.HashMap;
import java.util.Map;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.log4testng.Logger;
import com.imooc.MRAutoSpace.model.http.HttpClientRequest;
import com.imooc.MRAutoSpace.model.http.HttpClientResponse;
import com.imooc.MRAutoSpace.uitls.http.HttpClientUtil;
public class HttpClientUtilTest {
private static Logger logger = Logger.getLogger(HttpClientUtilTest.class);
@Test
public void testMethod() {
HttpClientRequest request = new HttpClientRequest();
request.setUrl("http://localhost:19090/getClassName?name=value");
Map requestHeaders = new HashMap();
requestHeaders.put("name01", "value01");
requestHeaders.put("name02", "value02");
request.setHeaders(requestHeaders);
HttpClientResponse response = HttpClientUtil.doGet(request);
Assert.assertEquals("400", response.getStatusCode());
}
@Test
public void testMethodPost() {
HttpClientRequest request = new HttpClientRequest();
request.setUrl("http://localhost:19090/getClassName?name=value");
Map requestHeaders = new HashMap();
requestHeaders.put("name01", "value01");
requestHeaders.put("name02", "value02");
request.setHeaders(requestHeaders);
request.setBody("test body string");
HttpClientResponse response = HttpClientUtil.doPost(request);
Assert.assertEquals("{\"id\": \"\", \"className\": \"testClassName\"}", response.getBody());
}
@Test
public void testFormatUrl() {
String url = "http://localhost:19090/testurl";
Map requestHeaders = new HashMap();
requestHeaders.put("name01", "value01");
requestHeaders.put("name02", "value02");
HttpClientUtil util = new HttpClientUtil();
Assert.assertEquals(util.formatUrl(url, requestHeaders), "http://localhost:19090/testurl?name02=value02&name01=value01");
}
}