JavaHttpClient用法的示例详解_第1页
JavaHttpClient用法的示例详解_第2页
JavaHttpClient用法的示例详解_第3页
JavaHttpClient用法的示例详解_第4页
JavaHttpClient用法的示例详解_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论