HttpComponents - HttpClient 基础篇

简介: HttpComponents - HttpClient 基础篇

image.pngimage.pngimage.pngPs:CDSpace工具。image.pngPs:发送个get和post请求的5个步骤image.pngimage.pngimage.pngimage.png

核心代码:

// pom.xml<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency>
packagecom.imooc.MRAutoSpace.model.http;
importjava.util.Map;
importorg.apache.http.client.methods.HttpUriRequest;
publicclassHttpClientRequest {
privateStringurl;
//  private HttpUriRequest httpMethod;privateMap<String, String>headers;
privateStringbody;
publicStringgetUrl() {
returnurl;
    }
publicvoidsetUrl(Stringurl) {
this.url=url;
    }
//  public HttpUriRequest getHttpMethod() {//      return httpMethod;//  }////  public void setHttpMethod(HttpUriRequest httpMethod) {//      this.httpMethod = httpMethod;//  }publicMap<String, String>getHeaders() {
returnheaders;
    }
publicvoidsetHeaders(Map<String, String>headers) {
this.headers=headers;
    }
publicStringgetBody() {
returnbody;
    }
publicvoidsetBody(Stringbody) {
this.body=body;
    }
}
packagecom.imooc.MRAutoSpace.model.http;
importjava.util.Map;
publicclassHttpClientResponse {
privateStringstatusCode;
privateMap<String, String>headers;
privateStringbody;
publicStringgetStatusCode() {
returnstatusCode;
    }
publicvoidsetStatusCode(StringstatusCode) {
this.statusCode=statusCode;
    }
publicMap<String, String>getHeaders() {
returnheaders;
    }
publicvoidsetHeaders(Map<String, String>headers) {
this.headers=headers;
    }
publicStringgetBody() {
returnbody;
    }
publicvoidsetBody(Stringbody) {
this.body=body;
    }
}
packagecom.imooc.MRAutoSpace.uitls.http;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.Map;
importorg.apache.commons.io.IOUtils;
importorg.apache.http.Header;
importorg.apache.http.HttpEntity;
importorg.apache.http.client.ClientProtocolException;
importorg.apache.http.client.methods.CloseableHttpResponse;
importorg.apache.http.client.methods.HttpDelete;
importorg.apache.http.client.methods.HttpEntityEnclosingRequestBase;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.client.methods.HttpPut;
importorg.apache.http.client.methods.HttpRequestBase;
importorg.apache.http.entity.StringEntity;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.HttpClientBuilder;
importorg.apache.log4j.Logger;
importcom.imooc.MRAutoSpace.model.http.HttpClientRequest;
importcom.imooc.MRAutoSpace.model.http.HttpClientResponse;
publicclassHttpClientUtil {
privatestaticLoggerlogger=Logger.getLogger(HttpClientUtil.class);
privateCloseableHttpClienthttpClient;
publicstaticHttpClientResponsedoGet(HttpClientRequesthttpClientRequest) {
HttpClientUtilhttpClientUtil=newHttpClientUtil();
httpClientUtil.init();
HttpGethttpGet=newHttpGet(httpClientRequest.getUrl());
returnhttpClientUtil.sendRequest(httpGet, httpClientRequest);
    }
publicstaticHttpClientResponsedoPost(HttpClientRequesthttpClientRequest) {
HttpClientUtilhttpClientUtil=newHttpClientUtil();
httpClientUtil.init();
HttpPosthttpPost=newHttpPost(httpClientRequest.getUrl());
returnhttpClientUtil.sendRequest(httpPost, httpClientRequest);
    }
publicstaticHttpClientResponsedoDelete(HttpClientRequesthttpClientRequest) {
HttpClientUtilhttpClientUtil=newHttpClientUtil();
httpClientUtil.init();
HttpDeletehttpDelete=newHttpDelete(httpClientRequest.getUrl());
returnhttpClientUtil.sendRequest(httpDelete, httpClientRequest);
    }
publicstaticHttpClientResponsedoPut(HttpClientRequesthttpClientRequest) {
HttpClientUtilhttpClientUtil=newHttpClientUtil();
httpClientUtil.init();
HttpPuthttpPut=newHttpPut(httpClientRequest.getUrl());
returnhttpClientUtil.sendRequest(httpPut, httpClientRequest);
    }
privatevoidinit() {
httpClient=HttpClientBuilder.create().build();
logger.info("Start init http connection.");
    }
privateHttpClientResponsesendRequest(HttpRequestBasehttpRequestBase, HttpClientRequesthttpClientRequest) {
HttpClientResponsehttpClientResponse=newHttpClientResponse();
StringencodingOfBody="ISO-8859-1";
Map<String, String>requestHeaders=httpClientRequest.getHeaders();
for ( Stringkey : requestHeaders.keySet()) {
httpRequestBase.setHeader(key, requestHeaders.get(key));
if (key.toLowerCase().equals("content-type")) {
StringcontentType=requestHeaders.get(key);
if ( contentType.split(";").length>=2 ) {
encodingOfBody=contentType.split(";")[1].split("=")[1];
                }
            }
        }
if ( httpRequestBaseinstanceofHttpEntityEnclosingRequestBase ) {
            ((HttpEntityEnclosingRequestBase) httpRequestBase).setEntity(newStringEntity(httpClientRequest.getBody(), encodingOfBody));
        }
try {
CloseableHttpResponseresponse=httpClient.execute(httpRequestBase);
StringstatusCode=response.getStatusLine().toString().split(" ")[1];
logger.info(statusCode);
httpClientResponse.setStatusCode(statusCode);
Header[] headers=response.getAllHeaders();
Map<String, String>responseHeaders=newHashMap<String, String>();
for (Headerheader : headers) {
logger.info(header.getName() +": "+header.getValue());
responseHeaders.put(header.getName(), header.getValue());
            }
httpClientResponse.setHeaders(responseHeaders);
HttpEntityentity=response.getEntity();
Stringbody=IOUtils.toString(entity.getContent());
logger.info(body);
httpClientResponse.setBody(body);
this.close();
        } catch (ClientProtocolExceptione) {
logger.error("This http protocol is not supported.");
logger.error(e.getMessage());
        } catch (IOExceptione) {
logger.error(e.getMessage());
        }
returnhttpClientResponse; 
    }
privatevoidclose() {
try {
httpClient.close();
logger.info("Close http connection successfully!");
        } catch (IOExceptione) {
logger.error("Close http connction failed.");
logger.error(e.getMessage());
        }
    }
publicStringformatUrl(Stringurl, Map<String, String>queryParams) {
Stringresult="";
Stringparams="";
for (Stringkey : queryParams.keySet()) {
params+= (key+"="+queryParams.get(key) +"&"); 
        }
result+= (url+"?"+params.substring(0, params.length() -1));
returnresult;
    }
publicCloseableHttpClientgetHttpClient() {
returnhttpClient;
    }
publicvoidsetHttpClient(CloseableHttpClienthttpClient) {
this.httpClient=httpClient;
    }
}
packagecom.imooc.MRAutoSpace.http;
importjava.util.HashMap;
importjava.util.Map;
importorg.testng.Assert;
importorg.testng.annotations.Test;
importorg.testng.log4testng.Logger;
importcom.imooc.MRAutoSpace.model.http.HttpClientRequest;
importcom.imooc.MRAutoSpace.model.http.HttpClientResponse;
importcom.imooc.MRAutoSpace.uitls.http.HttpClientUtil;
publicclassHttpClientUtilTest {
privatestaticLoggerlogger=Logger.getLogger(HttpClientUtilTest.class);
@TestpublicvoidtestMethod() {
HttpClientRequestrequest=newHttpClientRequest();
request.setUrl("http://localhost:19090/getClassName?name=value");
Map<String, String>requestHeaders=newHashMap<String, String>();
requestHeaders.put("name01", "value01");
requestHeaders.put("name02", "value02");
request.setHeaders(requestHeaders);
HttpClientResponseresponse=HttpClientUtil.doGet(request);
Assert.assertEquals("400", response.getStatusCode());
    }
@TestpublicvoidtestMethodPost() {
HttpClientRequestrequest=newHttpClientRequest();
request.setUrl("http://localhost:19090/getClassName?name=value");
Map<String, String>requestHeaders=newHashMap<String, String>();
requestHeaders.put("name01", "value01");
requestHeaders.put("name02", "value02");
request.setHeaders(requestHeaders);
request.setBody("test body string");
HttpClientResponseresponse=HttpClientUtil.doPost(request);
Assert.assertEquals("{\"id\": \"\", \"className\": \"testClassName\"}", response.getBody());
    }
@TestpublicvoidtestFormatUrl() {
Stringurl="http://localhost:19090/testurl";
Map<String, String>requestHeaders=newHashMap<String, String>();
requestHeaders.put("name01", "value01");
requestHeaders.put("name02", "value02");
HttpClientUtilutil=newHttpClientUtil();
Assert.assertEquals(util.formatUrl(url, requestHeaders), "http://localhost:19090/testurl?name02=value02&name01=value01");
    }
}
目录
相关文章
|
8天前
commons-httpclient 和 httpclient 区别
commons-httpclient 和 httpclient 区别
|
6月前
Httpclient使用总结
Httpclient使用总结
38 0
|
8月前
|
Arthas Java 测试技术
一次NSF FeignClient支持Apache HttpClient的优化
一次NSF FeignClient支持Apache HttpClient的优化
220 2
HttpComponents - HttpClient 获取 Cookie 的两种方式
HttpComponents - HttpClient 获取 Cookie 的两种方式
233 0
|
Java Apache Maven
Apache HttpComponents 之 Httpclient 参考
Apache HttpComponents Apache HttpComponents 项目负责创建和维护一个基于 HTTP 和相关协议的底层 Java 组件工具集。
503 0
Apache HttpComponents 之 Httpclient 参考
|
Java 应用服务中间件 API
|
Java 数据安全/隐私保护

热门文章

最新文章