JAVA通过HttpClient发送HTTP请求的方法示例
HttpClient介绍
HttpClient不是一个浏览器。它是一个客户端的HTTP通信实现库。HttpClient的目标是发送和接收HTTP报文。HttpClient不会去缓存内容,执行嵌入在HTML页面中的javascript代码,猜测内容类型,重新格式化请求/重定向URI,或者其它和HTTP运输无关的功能。
HttpClient使用
使用需要引入jar包,maven项目引入如下:
org.apache.httpcomponents httpclient 4.5 org.apache.httpcomponents httpcore 4.4.4 org.apache.httpcomponents httpmime 4.5
使用方法,代码如下:
packagecom.test;
importjava.io.File;
importjava.io.IOException;
importjava.security.KeyManagementException;
importjava.security.KeyStoreException;
importjava.security.NoSuchAlgorithmException;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpStatus;
importorg.apache.http.client.config.RequestConfig;
importorg.apache.http.client.methods.CloseableHttpResponse;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.config.Registry;
importorg.apache.http.config.RegistryBuilder;
importorg.apache.http.conn.socket.ConnectionSocketFactory;
importorg.apache.http.conn.socket.PlainConnectionSocketFactory;
importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;
importorg.apache.http.conn.ssl.SSLContextBuilder;
importorg.apache.http.conn.ssl.TrustSelfSignedStrategy;
importorg.apache.http.entity.ContentType;
importorg.apache.http.entity.StringEntity;
importorg.apache.http.entity.mime.MultipartEntityBuilder;
importorg.apache.http.entity.mime.content.FileBody;
importorg.apache.http.entity.mime.content.StringBody;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.DefaultHttpRequestRetryHandler;
importorg.apache.http.impl.client.HttpClients;
importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;
importorg.apache.http.util.EntityUtils;
/**
*
*@authorH__D
*@date2016年10月19日上午11:27:25
*
*/
publicclassHttpClientUtil{
//utf-8字符编码
publicstaticfinalStringCHARSET_UTF_8="utf-8";
//HTTP内容类型。
publicstaticfinalStringCONTENT_TYPE_TEXT_HTML="text/xml";
//HTTP内容类型。相当于form表单的形式,提交数据
publicstaticfinalStringCONTENT_TYPE_FORM_URL="application/x-www-form-urlencoded";
//HTTP内容类型。相当于form表单的形式,提交数据
publicstaticfinalStringCONTENT_TYPE_JSON_URL="application/json;charset=utf-8";
//连接管理器
privatestaticPoolingHttpClientConnectionManagerpool;
//请求配置
privatestaticRequestConfigrequestConfig;
static{
try{
//System.out.println("初始化HttpClientTest~~~开始");
SSLContextBuilderbuilder=newSSLContextBuilder();
builder.loadTrustMaterial(null,newTrustSelfSignedStrategy());
SSLConnectionSocketFactorysslsf=newSSLConnectionSocketFactory(
builder.build());
//配置同时支持HTTP和HTPPS
RegistrysocketFactoryRegistry=RegistryBuilder.create().register(
"http",PlainConnectionSocketFactory.getSocketFactory()).register(
"https",sslsf).build();
//初始化连接管理器
pool=newPoolingHttpClientConnectionManager(
socketFactoryRegistry);
//将最大连接数增加到200,实际项目最好从配置文件中读取这个值
pool.setMaxTotal(200);
//设置最大路由
pool.setDefaultMaxPerRoute(2);
//根据默认超时限制初始化requestConfig
intsocketTimeout=10000;
intconnectTimeout=10000;
intconnectionRequestTimeout=10000;
requestConfig=RequestConfig.custom().setConnectionRequestTimeout(
connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout(
connectTimeout).build();
//System.out.println("初始化HttpClientTest~~~结束");
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(KeyStoreExceptione){
e.printStackTrace();
}catch(KeyManagementExceptione){
e.printStackTrace();
}
//设置请求超时时间
requestConfig=RequestConfig.custom().setSocketTimeout(50000).setConnectTimeout(50000)
.setConnectionRequestTimeout(50000).build();
}
publicstaticCloseableHttpClientgetHttpClient(){
CloseableHttpClienthttpClient=HttpClients.custom()
//设置连接池管理
.setConnectionManager(pool)
//设置请求配置
.setDefaultRequestConfig(requestConfig)
//设置重试次数
.setRetryHandler(newDefaultHttpRequestRetryHandler(0,false))
.build();
returnhttpClient;
}
/**
*发送Post请求
*
*@paramhttpPost
*@return
*/
privatestaticStringsendHttpPost(HttpPosthttpPost){
CloseableHttpClienthttpClient=null;
CloseableHttpResponseresponse=null;
//响应内容
StringresponseContent=null;
try{
//创建默认的httpClient实例.
httpClient=getHttpClient();
//配置请求信息
httpPost.setConfig(requestConfig);
//执行请求
response=httpClient.execute(httpPost);
//得到响应实例
HttpEntityentity=response.getEntity();
//可以获得响应头
//Header[]headers=response.getHeaders(HttpHeaders.CONTENT_TYPE);
//for(Headerheader:headers){
//System.out.println(header.getName());
//}
//得到响应类型
//System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());
//判断响应状态
if(response.getStatusLine().getStatusCode()>=300){
thrownewException(
"HTTPRequestisnotsuccess,Responsecodeis"+response.getStatusLine().getStatusCode());
}
if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){
responseContent=EntityUtils.toString(entity,CHARSET_UTF_8);
EntityUtils.consume(entity);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
//释放资源
if(response!=null){
response.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
returnresponseContent;
}
/**
*发送Get请求
*
*@paramhttpGet
*@return
*/
privatestaticStringsendHttpGet(HttpGethttpGet){
CloseableHttpClienthttpClient=null;
CloseableHttpResponseresponse=null;
//响应内容
StringresponseContent=null;
try{
//创建默认的httpClient实例.
httpClient=getHttpClient();
//配置请求信息
httpGet.setConfig(requestConfig);
//执行请求
response=httpClient.execute(httpGet);
//得到响应实例
HttpEntityentity=response.getEntity();
//可以获得响应头
//Header[]headers=response.getHeaders(HttpHeaders.CONTENT_TYPE);
//for(Headerheader:headers){
//System.out.println(header.getName());
//}
//得到响应类型
//System.out.println(ContentType.getOrDefault(response.getEntity()).getMimeType());
//判断响应状态
if(response.getStatusLine().getStatusCode()>=300){
thrownewException(
"HTTPRequestisnotsuccess,Responsecodeis"+response.getStatusLine().getStatusCode());
}
if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){
responseContent=EntityUtils.toString(entity,CHARSET_UTF_8);
EntityUtils.consume(entity);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
//释放资源
if(response!=null){
response.close();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
returnresponseContent;
}
/**
*发送post请求
*
*@paramhttpUrl
*地址
*/
publicstaticStringsendHttpPost(StringhttpUrl){
//创建httpPost
HttpPosthttpPost=newHttpPost(httpUrl);
returnsendHttpPost(httpPost);
}
/**
*发送get请求
*
*@paramhttpUrl
*/
publicstaticStringsendHttpGet(StringhttpUrl){
//创建get请求
HttpGethttpGet=newHttpGet(httpUrl);
returnsendHttpGet(httpGet);
}
/**
*发送post请求(带文件)
*
*@paramhttpUrl
*地址
*@parammaps
*参数
*@paramfileLists
*附件
*/
publicstaticStringsendHttpPost(StringhttpUrl,Mapmaps,ListfileLists){
HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost
MultipartEntityBuildermeBuilder=MultipartEntityBuilder.create();
if(maps!=null){
for(Stringkey:maps.keySet()){
meBuilder.addPart(key,newStringBody(maps.get(key),ContentType.TEXT_PLAIN));
}
}
if(fileLists!=null){
for(Filefile:fileLists){
FileBodyfileBody=newFileBody(file);
meBuilder.addPart("files",fileBody);
}
}
HttpEntityreqEntity=meBuilder.build();
httpPost.setEntity(reqEntity);
returnsendHttpPost(httpPost);
}
/**
*发送post请求
*
*@paramhttpUrl
*地址
*@paramparams
*参数(格式:key1=value1&key2=value2)
*
*/
publicstaticStringsendHttpPost(StringhttpUrl,Stringparams){
HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost
try{
//设置参数
if(params!=null&¶ms.trim().length()>0){
StringEntitystringEntity=newStringEntity(params,"UTF-8");
stringEntity.setContentType(CONTENT_TYPE_FORM_URL);
httpPost.setEntity(stringEntity);
}
}catch(Exceptione){
e.printStackTrace();
}
returnsendHttpPost(httpPost);
}
/**
*发送post请求
*
*@parammaps
*参数
*/
publicstaticStringsendHttpPost(StringhttpUrl,Mapmaps){
Stringparem=convertStringParamter(maps);
returnsendHttpPost(httpUrl,parem);
}
/**
*发送post请求发送json数据
*
*@paramhttpUrl
*地址
*@paramparamsJson
*参数(格式json)
*
*/
publicstaticStringsendHttpPostJson(StringhttpUrl,StringparamsJson){
HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost
try{
//设置参数
if(paramsJson!=null&¶msJson.trim().length()>0){
StringEntitystringEntity=newStringEntity(paramsJson,"UTF-8");
stringEntity.setContentType(CONTENT_TYPE_JSON_URL);
httpPost.setEntity(stringEntity);
}
}catch(Exceptione){
e.printStackTrace();
}
returnsendHttpPost(httpPost);
}
/**
*发送post请求发送xml数据
*
*@paramhttpUrl地址
*@paramparamsXml参数(格式Xml)
*
*/
publicstaticStringsendHttpPostXml(StringhttpUrl,StringparamsXml){
HttpPosthttpPost=newHttpPost(httpUrl);//创建httpPost
try{
//设置参数
if(paramsXml!=null&¶msXml.trim().length()>0){
StringEntitystringEntity=newStringEntity(paramsXml,"UTF-8");
stringEntity.setContentType(CONTENT_TYPE_TEXT_HTML);
httpPost.setEntity(stringEntity);
}
}catch(Exceptione){
e.printStackTrace();
}
returnsendHttpPost(httpPost);
}
/**
*将map集合的键值对转化成:key1=value1&key2=value2的形式
*
*@paramparameterMap
*需要转化的键值对集合
*@return字符串
*/
publicstaticStringconvertStringParamter(MapparameterMap){
StringBufferparameterBuffer=newStringBuffer();
if(parameterMap!=null){
Iteratoriterator=parameterMap.keySet().iterator();
Stringkey=null;
Stringvalue=null;
while(iterator.hasNext()){
key=(String)iterator.next();
if(parameterMap.get(key)!=null){
value=(String)parameterMap.get(key);
}else{
value="";
}
parameterBuffer.append(key).append("=").append(value);
if(iterator.hasNext()){
parameterBuffer.append("&");
}
}
}
returnparameterBuffer.toString();
}
publicstaticvoidmain(String[]args)throwsException{
System.out.println(sendHttpGet("http://www.baidu.com"));
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。