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");
    }
}
目录
相关文章
|
Kubernetes 数据库 Docker
Docker 部署
Docker 部署可以通过以下步骤进行: 1. 安装 Docker:首先,需要在你的计算机上安装 Docker。请访问 Docker 官方网站(https://www.docker.com/)以获取适合你操作系统的 Docker 安装包。
420 1
|
NoSQL Redis
Redis集群(六):集群常用命令及说明
Redis集群(六):集群常用命令及说明
607 0
|
安全 应用服务中间件 数据安全/隐私保护
企业实战(5) Docker私有镜像仓库Harbor的部署与使用详解
企业实战(5) Docker私有镜像仓库Harbor的部署与使用详解
677 0
|
存储 安全 算法
[ web基础篇 ] session,cookie,token 那些事儿 ?
session ?cookie ?token ? 相信大家对这几个词并不陌生,不管是面试还是工作都会有涉及的,可想而知它的重要性。 网上关于 session、cookie、token 的文章有很多,每篇文章都有一些独特的见解。 在写文章之前,我看了很多篇 session、cookie、token 的文章,感觉很多都没有讲的很清楚,泛泛而谈。 在看了这么多的文章之后,我对这几次词又有了不一样的理解,在这里和大家分享一下。
624 0
[ web基础篇 ] session,cookie,token 那些事儿 ?
|
人工智能 自动驾驶 云栖大会
大模型赋能智能座舱,NVIDIA 深度适配通义千问大模型
9月20日杭州云栖大会上, NVIDIA DRIVE Orin系统级芯片实现了与阿里云通义千问多模态大模型Qwen2-VL的深度适配。阿里云、斑马智行联合NVIDIA英伟达推出舱驾融合大模型解决方案,基于通义大模型开发“能听会看”的智能座舱助理,让车内人员通过语音交流就能操作座舱内的各类应用,享受极致丰富的交互体验。
704 14
|
安全 云栖大会 云计算
首批Well-Architected生态合作伙伴揭晓,齐聚2024云栖大会
在帮助企业客户上好云、用好云、管好云的道路上,阿里云始终坚持开放合作的理念,不断寻求与优质的生态伙伴深化合作,携手共建Well-Architected技术与服务方案。在今年的云栖大会上,共七家合作伙伴企业荣获首批「Well-Architected阿里云卓越架构生态合作伙伴」认证。
588 2
|
Web App开发 安全 API
想开发一款带有视频通话/共享屏幕功能的产品?那WebRTC是你必须要知道的!
一名技术爱好者在研究如何为开源项目集成视频通话功能时,深入学习了WebRTC技术。WebRTC是一个API,允许浏览器和应用实现实时音视频通信,简化了之前复杂的技术挑战,如音视频处理和网络传输。该技术可用于视频通话、桌面共享、视频会议等多种场景。在WebRTC中,通过信令交换、STUN/TURN服务器和ICE框架处理网络连接和通信路径,实现点对点连接。与WebSocket不同,WebRTC专注于高质量实时通信,使用UDP协议以降低延迟。接下来的文章将分享如何实现WebRTC的视频通话功能。
|
存储 API 数据安全/隐私保护
企业级Docker镜像仓库Harbor部署与使用
企业级Docker镜像仓库Harbor部署与使用
|
Java Spring
Spring5源码(29)-Pointcut和Advisor以及静态普通方法名匹配切面
Spring5源码(29)-Pointcut和Advisor以及静态普通方法名匹配切面
192 0
|
XML Java 数据格式
Spring5源码(41)-tx:annotation-driven 标签解析过程
Spring5源码(41)-tx:annotation-driven 标签解析过程
623 0