




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第JavaHttpClient用法的示例详解目录1、导入依赖2、使用工具类3、扩展
1、导入依赖
dependency
groupIdorg.apache.httpcomponents/groupId
artifactIdhttpclient/artifactId
version4.5.3/version
/dependency
dependency
groupIdcom.alibaba/groupId
artifactIdfastjson/artifactId
version1.2.58/version
/dependency
dependency
groupIdorg.apache.httpcomponents/groupId
artifactIdhttpmime/artifactId
version4.5.3/version
/dependency
dependency
groupIdorg.apache.httpcomponents/groupId
artifactIdhttpcore/artifactId
version4.4.13/version
/dependency
dependency
groupIdorg.slf4j/groupId
artifactIdslf4j-api/artifactId
version1.7.7/version
/dependency
2、使用工具类
该工具类将get请求和post请求当中几种传参方式都写了,其中有get地址栏传参、get的params传参、post的params传参、post的json传参。
importcom.alibaba.fastjson.JSONObject;
importorg.apache.http.Consts;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpStatus;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.ClientProtocolException;
importorg.apache.http.client.config.RequestConfig;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.CloseableHttpResponse;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.client.utils.URIBuilder;
importorg.apache.http.entity.ContentType;
importorg.apache.http.entity.StringEntity;
importorg.apache.http.entity.mime.HttpMultipartMode;
importorg.apache.http.entity.mime.MultipartEntityBuilder;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.HttpClients;
importorg.apache.http.message.BasicNameValuePair;
importorg.apache.http.util.EntityUtils;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importjava.io.*;
import.URI;
import.URISyntaxException;
importjava.nio.charset.Charset;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Map;
publicclassHttpClientUtil{
privatestaticLoggerlogger=LoggerFactory.getLogger(HttpClientUtil.class);
privatestaticfinalintDEFULT_TIMEOUT=30*1000;//默认超时时间20秒
*可以访问http://localhost:9005/yzhwsj/addPersonal/1/2这样的接口
*@paramurl
*@paramheaders
*@paramurlParam
*@paramtimeout
*@return
privatestaticStringdoUrlGet(Stringurl,MapString,Stringheaders,ListStringurlParam,Integertimeout){
//创建httpClient对象
CloseableHttpClienthttpClient=HttpClients.createDefault();
StringresultString=null;
CloseableHttpResponseresponse=null;
try{
//创建uri
if(urlParam!=null){
for(Stringparam:urlParam){
url=url+"/"+param;
//创建hTTPget请求
HttpGethttpGet=newHttpGet(url);
//设置超时时间
inttimeoutTmp=DEFULT_TIMEOUT;
if(timeout!=null){
timeoutTmp=timeout;
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(timeoutTmp)
.setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build();
httpGet.setConfig(requestConfig);
//设置头信息
if(null!=headers){
for(Stringkey:headers.keySet()){
httpGet.setHeader(key,headers.get(key));
//执行请求
response=httpClient.execute(httpGet);
if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){
resultString=EntityUtils.toString(response.getEntity(),Consts.UTF_8);
}catch(IOExceptione){
logger.error("http调用异常"+e.toString(),e);
}finally{
try{
if(null!=response){
response.close();
}catch(IOExceptione){
logger.error("response关闭异常"+e.toString(),e);
try{
if(null!=httpClient){
httpClient.close();
}catch(IOExceptione){
logger.error("httpClient关闭异常"+e.toString(),e);
returnresultString;
*@paramurl
*@paramheaders
*@paramparams
*@paramtimeout
*@return
privatestaticStringdoGet(Stringurl,MapString,Stringheaders,MapString,Objectparams,Integertimeout){
//创建httpClient对象
CloseableHttpClienthttpClient=HttpClients.createDefault();
StringresultString=null;
CloseableHttpResponseresponse=null;
try{
//1.创建uri
URIBuilderbuilder=newURIBuilder(url);
if(params!=null){
//uri添加参数
for(Stringkey:params.keySet()){
builder.addParameter(key,String.valueOf(params.get(key)));
URIuri=builder.build();
//2.创建hTTPget请求
HttpGethttpGet=newHttpGet(uri);
//3.设置超时时间
inttimeoutTmp=DEFULT_TIMEOUT;
if(timeout!=null){
timeoutTmp=timeout;
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(timeoutTmp)
.setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build();
httpGet.setConfig(requestConfig);
//4.设置头信息
if(null!=headers){
for(Stringkey:headers.keySet()){
httpGet.setHeader(key,headers.get(key));
//5.执行请求
response=httpClient.execute(httpGet);
if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){
resultString=EntityUtils.toString(response.getEntity(),Consts.UTF_8);
}catch(URISyntaxExceptione){
logger.error("http调用异常"+e.toString(),e);
}catch(IOExceptione){
logger.error("http调用异常"+e.toString(),e);
}finally{
try{
if(null!=response){
response.close();
}catch(IOExceptione){
logger.error("response关闭异常"+e.toString(),e);
try{
if(null!=httpClient){
httpClient.close();
}catch(IOExceptione){
logger.error("httpClient关闭异常"+e.toString(),e);
returnresultString;
*调用httppost请求(json数据)
*@paramurl
*@paramheaders
*@paramjson
*@return
publicstaticStringdoJsonPost(Stringurl,MapString,Stringheaders,JSONObjectjson,Integertimeout){
CloseableHttpClienthttpClient=HttpClients.createDefault();
CloseableHttpResponseresponse=null;
StringresultString="";
try{
//1.创建httppost请求
HttpPosthttpPost=newHttpPost(url);
//2.设置超时时间
inttimeoutTmp=DEFULT_TIMEOUT;
if(timeout!=null){
timeoutTmp=timeout;
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(timeoutTmp)
.setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build();
httpPost.setConfig(requestConfig);
//3.设置参数信息
StringEntitys=newStringEntity(json.toString(),Consts.UTF_8);
//发送json数据需要设置的contentType
s.setContentType("application/json");
httpPost.setEntity(s);
//4.设置头信息
if(headers!=null){
for(Stringkey:headers.keySet()){
httpPost.setHeader(key,headers.get(key));
//5.执行http请求
response=httpClient.execute(httpPost);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
resultString=EntityUtils.toString(response.getEntity(),Consts.UTF_8);
}catch(UnsupportedEncodingExceptione){
logger.error("调用http异常"+e.toString(),e);
}catch(ClientProtocolExceptione){
logger.error("调用http异常"+e.toString(),e);
}catch(IOExceptione){
logger.error("调用http异常"+e.toString(),e);
}finally{
try{
if(null!=response){
response.close();
}catch(IOExceptione){
logger.error("关闭response异常"+e.toString(),e);
try{
if(null!=httpClient){
httpClient.close();
}catch(IOExceptione){
logger.error("关闭httpClient异常"+e.toString(),e);
returnresultString;
*调用httppost请求基础方法
*@paramurl请求的url
*@paramheaders请求头
*@paramparams参数
*@paramtimeout超时时间
*@return
publicstaticStringdoPost(Stringurl,MapString,Stringheaders,MapString,Objectparams,Integertimeout){
CloseableHttpClienthttpClient=HttpClients.createDefault();
CloseableHttpResponseresponse=null;
StringresultString="";
try{
//1.创建httppost请求
HttpPosthttpPost=newHttpPost(url);
//2.设置超时时间
inttimeoutTmp=DEFULT_TIMEOUT;
if(timeout!=null){
timeoutTmp=timeout;
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(timeoutTmp)
.setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build();
httpPost.setConfig(requestConfig);
//3.设置参数信息
if(params!=null){
ListNameValuePairparamList=newArrayList();
for(Stringkey:params.keySet()){
paramList.add(newBasicNameValuePair(key,String.valueOf(params.get(key))));
//模拟表单
UrlEncodedFormEntityentity=newUrlEncodedFormEntity(paramList,Consts.UTF_8);
httpPost.setEntity(entity);
//4.设置头信息
if(headers!=null){
for(Stringkey:headers.keySet()){
httpPost.setHeader(key,headers.get(key));
//5.执行http请求
response=httpClient.execute(httpPost);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
resultString=EntityUtils.toString(response.getEntity(),Consts.UTF_8);
}catch(UnsupportedEncodingExceptione){
logger.error("调用http异常"+e.toString(),e);
}catch(ClientProtocolExceptione){
logger.error("调用http异常"+e.toString(),e);
}catch(IOExceptione){
logger.error("调用http异常"+e.toString(),e);
}finally{
try{
if(null!=response){
response.close();
}catch(IOExceptione){
logger.error("关闭response异常"+e.toString(),e);
try{
if(null!=httpClient){
httpClient.close();
}catch(IOExceptione){
logger.error("关闭httpClient异常"+e.toString(),e);
returnresultString;
*通过httpClient上传文件
*@paramurl请求的URL
*@paramheaders请求头参数
*@parampath文件路径
*@paramfileName文件名称
*@paramtimeout超时时间
*@return
publicstaticStringUploadFileByHttpClient(Stringurl,MapString,Stringheaders,Stringpath,StringfileName,Integertimeout){
StringresultString="";
CloseableHttpClienthttpClient=HttpClients.createDefault();
CloseableHttpResponseresponse=null;
InputStreamcontent=null;
BufferedReaderin=null;
try{
//1.创建httppost请求
HttpPosthttpPost=newHttpPost(url);
//2.设置超时时间
inttimeoutTmp=DEFULT_TIMEOUT;
if(timeout!=null){
timeoutTmp=timeout;
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(timeoutTmp)
.setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build();
httpPost.setConfig(requestConfig);
//3.设置参数信息
//HttpMultipartMode.RFC6532参数的设定是为避免文件名为中文时乱码
MultipartEntityBuilderbuilder=MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
//上传文件的路径
Filefile=newFile(path+File.separator+fileName);
builder.setCharset(Charset.forName("UTF-8"));
builder.addBinaryBody("file",file,ContentType.MULTIPART_FORM_DATA,fileName);
HttpEntityentity=builder.build();
httpPost.setEntity(entity);
//4.设置头信息
if(headers!=null){
for(Stringkey:headers.keySet()){
httpPost.setHeader(key,headers.get(key));
//5.执行http请求
response=httpClient.execute(httpPost);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
resultString=EntityUtils.toString(response.getEntity(),Consts.UTF_8);
}catch(Exceptione){
logger.error("上传文件失败:",e);
}finally{
try{
if(null!=httpClient){
httpClient.close();
}catch(IOExceptione){
logger.error("关闭httpClient异常"+e.toString(),e);
try{
if(null!=content){
content.close();
}catch(IOExceptione){
logger.error("关闭content异常"+e.toString(),e);
try{
if(null!=in){
in.close();
}catch(IOExceptione){
logger.error("关闭in异常"+e.toString(),e);
returnresultString;
*通过httpClient批量上传文件
*@paramurl请求的URL
*@paramheaders请求头参数
*@paramparams参数
*@parampaths文件路径(key文件名称,value路径)
*@paramtimeout超时时间
*@return
publicstaticStringUploadFilesByHttpClient(Stringurl,MapString,Stringheaders,MapString,Stringparams,MapString,Stringpaths,Integertimeout){
StringresultString="";
CloseableHttpClienthttpClient=HttpClients.createDefault();
CloseableHttpResponseresponse=null;
InputStreamcontent=null;
BufferedReaderin=null;
try{
//1.创建httppost请求
HttpPosthttpPost=newHttpPost(url);
//2.设置超时时间
inttimeoutTmp=DEFULT_TIMEOUT;
if(timeout!=null){
timeoutTmp=timeout;
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(timeoutTmp)
.setConnectionRequestTimeout(timeoutTmp).setSocketTimeout(timeoutTmp).build();
httpPost.setConfig(requestConfig);
//3.设置文件信息
//HttpMultipartMode.RFC6532参数的设定是为避免文件名为中文时乱码
MultipartEntityBuilderbuilder=MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
builder.setCharset(Charset.forName("UTF-8"));
//上传文件的路径
for(Map.EntryString,Stringm:paths.entrySet()){
Filefile=newFile(m.getValue()+File.separator+m.getKey());
builder.addBinaryBody("files",file,ContentType.MULTIPART_FORM_DATA,m.getKey());
//4.设置参数信息
ContentTypecontentType=ContentType.cr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成人服装采购合同协议书
- 纺织品检验员证书考试技巧与策略试题及答案
- 亲子游泳员工合同协议书
- 合同协议-退伙协议书
- 股东合同或者协议书
- 劳务合同分包协议书
- 购物网站建设合同协议书
- 合同送达协议书
- 比价合同协议书
- 废钢收购合同协议书
- 河北省2025年普通高中学业水平选择性考试·调研卷I语文+答案
- 河南省南阳市六校2024-2025学年高二下学期4月期中考试语文试卷(图片版含答案)
- 安全伴我行-筑牢生命防线
- 通讯迁改合同协议
- 泰语高级测试题及答案
- 土地合同转让三方协议书
- 聚焦财税场景的AIBM生态服务行业白皮书
- 2024年绵阳市商业银行招聘考试真题
- 入队前教育测试题及答案
- 2025年上半年广东东莞市委办公室招聘劳务派遣人员重点基础提升(共500题)附带答案详解
- GB/T 35267.4-2025清洗消毒器第4部分:内镜清洗消毒器
评论
0/150
提交评论