Java http请求封装工具类代码实例
java实现http请求的方法常用有两种,一种则是通过java自带的标准类HttpURLConnection去实现,另一种是通过apache的httpclient去实现。
本文用httpclient去实现,需要导入httpclient和httpcore两个jar包,测试时用的httpclient-4.5.1和httpcore-4.4.3。
HttpMethod.java
packagedemo;
publicenumHttpMethod{
GET,POST;
}
HttpHeader.java
packagedemo;
importjava.util.HashMap;
importjava.util.Map;
/**
*请求头
*/
publicclassHttpHeader{
privateMapparams=newHashMap();
publicHttpHeaderaddParam(Stringname,Stringvalue){
this.params.put(name,value);
returnthis;
}
publicMapgetParams(){
returnthis.params;
}
}   
HttpParamers.java
packagedemo;
importjava.io.IOException;
importjava.net.URLEncoder;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Set;
importcom.alibaba.fastjson.JSON;
/**
*请求参数
*/
publicclassHttpParamers{
privateMapparams=newHashMap();
privateHttpMethodhttpMethod;
privateStringjsonParamer="";
publicHttpParamers(HttpMethodhttpMethod){
this.httpMethod=httpMethod;
}
publicstaticHttpParamershttpPostParamers(){
returnnewHttpParamers(HttpMethod.POST);
}
publicstaticHttpParamershttpGetParamers(){
returnnewHttpParamers(HttpMethod.GET);
}
publicHttpParamersaddParam(Stringname,Stringvalue){
this.params.put(name,value);
returnthis;
}
publicHttpMethodgetHttpMethod(){
returnthis.httpMethod;
}
publicStringgetQueryString(Stringcharset)throwsIOException{
if((this.params==null)||(this.params.isEmpty())){
returnnull;
}
StringBuilderquery=newStringBuilder();
Set>entries=this.params.entrySet();
for(Map.Entryentry:entries){
Stringname=entry.getKey();
Stringvalue=entry.getValue();
query.append("&").append(name).append("=").append(URLEncoder.encode(value,charset));
}
returnquery.substring(1);
}
publicbooleanisJson(){
return!isEmpty(this.jsonParamer);
}
publicMapgetParams(){
returnthis.params;
}
publicStringtoString(){
return"HttpParamers"+JSON.toJSONString(this);
}
publicStringgetJsonParamer(){
returnthis.jsonParamer;
}
publicvoidsetJsonParamer(){
this.jsonParamer=JSON.toJSONString(this.params);
}
privatestaticbooleanisEmpty(CharSequencecs){
return(cs==null)||(cs.length()==0);
}
}     
HttpClient.java
packagedemo;
importjava.io.IOException;
importjava.util.Map;
importjava.util.Set;
importorg.apache.http.HttpEntity;
importorg.apache.http.client.methods.CloseableHttpResponse;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.client.methods.HttpRequestBase;
importorg.apache.http.entity.StringEntity;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.HttpClients;
importorg.apache.http.protocol.HTTP;
importorg.apache.http.util.EntityUtils;
publicclassHttpClient{
publicstaticfinalStringDEFAULT_CHARSET="UTF-8";
publicstaticfinalStringJSON_CONTENT_FORM="application/json;charset=UTF-8";
publicstaticfinalStringCONTENT_FORM="application/x-www-form-urlencoded;charset=UTF-8";
publicstaticStringdoService(Stringurl,HttpParamersparamers,HttpHeaderheader,intconnectTimeout,intreadTimeout)throwsException{
HttpMethodhttpMethod=paramers.getHttpMethod();
switch(httpMethod){
caseGET:
returndoGet(url,paramers,header,connectTimeout,readTimeout);
casePOST:
returndoPost(url,paramers,header,connectTimeout,readTimeout);
}
returnnull;
}
/**
*post方法
*@paramurl
*@paramparamers
*@paramheader
*@paramconnectTimeout
*@paramreadTimeout
*@return
*@throwsIOException
*/
publicstaticStringdoPost(Stringurl,HttpParamersparamers,HttpHeaderheader,intconnectTimeout,intreadTimeout)throwsIOException{
StringresponseData="";
CloseableHttpClienthttpClient=null;
CloseableHttpResponsehttpResponse=null;
try{
Stringquery=null;
HttpPosthttpPost=newHttpPost(url);
setHeader(httpPost,header);
if(paramers.isJson()){
//json数据
httpPost.setHeader(HTTP.CONTENT_TYPE,JSON_CONTENT_FORM);
query=paramers.getJsonParamer();
}else{
//表单数据
httpPost.setHeader(HTTP.CONTENT_TYPE,CONTENT_FORM);
query=paramers.getQueryString(DEFAULT_CHARSET);
}
if(query!=null){
HttpEntityreqEntity=newStringEntity(query);
httpPost.setEntity(reqEntity);
}
httpClient=HttpClients.createDefault();
httpResponse=httpClient.execute(httpPost);
HttpEntityresEntity=httpResponse.getEntity();
responseData=EntityUtils.toString(resEntity);
}catch(Exceptione){
e.printStackTrace();
}finally{
httpResponse.close();
httpClient.close();
}
returnresponseData;
}
/**
*get方法
*@paramurl
*@paramparams
*@paramheader
*@paramconnectTimeout
*@paramreadTimeout
*@return
*@throwsIOException
*/
publicstaticStringdoGet(Stringurl,HttpParamersparams,HttpHeaderheader,intconnectTimeout,intreadTimeout)throwsIOException{
StringresponseData="";
CloseableHttpClienthttpClient=null;
CloseableHttpResponsehttpResponse=null;
try{
Stringquery=params.getQueryString(DEFAULT_CHARSET);
url=buildGetUrl(url,query);
HttpGethttpGet=newHttpGet(url);
setHeader(httpGet,header);
httpClient=HttpClients.createDefault();
httpResponse=httpClient.execute(httpGet);
HttpEntityresEntity=httpResponse.getEntity();
responseData=EntityUtils.toString(resEntity);
}catch(Exceptione){
e.printStackTrace();
}finally{
httpResponse.close();
httpClient.close();
}
returnresponseData;
}
privatestaticvoidsetHeader(HttpRequestBasehttpRequestBase,HttpHeaderheader){
if(header!=null){
MapheaderMap=header.getParams();
if(headerMap!=null&&!headerMap.isEmpty()){
Set>entries=headerMap.entrySet();
for(Map.Entryentry:entries){
Stringname=entry.getKey();
Stringvalue=entry.getValue();
httpRequestBase.setHeader(name,value);
}
}
}
}
privatestaticStringbuildGetUrl(Stringurl,Stringquery)throwsIOException{
if(query==null||query.equals("")){
returnurl;
}
StringBuildernewUrl=newStringBuilder(url);
booleanhasQuery=url.contains("?");
booleanhasPrepend=(url.endsWith("?"))||(url.endsWith("&"));
if(!hasPrepend){
if(hasQuery){
newUrl.append("&");
}else{
newUrl.append("?");
hasQuery=true;
}
}
newUrl.append(query);
hasPrepend=false;
returnnewUrl.toString();
}
}   
HttpService.java
packagedemo;
importjava.util.Map;
importcom.alibaba.fastjson.JSONObject;
importcom.alibaba.fastjson.TypeReference;
publicclassHttpService{
privateStringserverUrl;
privateintconnectTimeout=15000;
privateintreadTimeout=30000;
publicHttpService(StringserverUrl){
this.serverUrl=serverUrl.trim();
}
publicMapcommonService(StringserviceUrl,HttpParamersparamers)throwsException{
returncommonService(serviceUrl,paramers,null);
}
publicMapcommonService(StringserviceUrl,HttpParamersparamers,HttpHeaderheader)throwsException{
Stringresponse=service(serviceUrl,paramers,header);
try{
Mapresult=JSONObject.parseObject(response,newTypeReference   
测试例子Test1.java
packagedemo;
importorg.junit.Ignore;
importorg.junit.Test;
publicclassTest1{
//免费的在线REST服务,提供测试用的HTTP请求假数据
//接口信息说明可见:http://www.hangge.com/blog/cache/detail_2020.html
Stringuri="http://jsonplaceholder.typicode.com";
//get方式请求数据
//请求地址:http://jsonplaceholder.typicode.com/posts
@Ignore("暂时忽略")
@Test
publicvoidtest1(){
System.out.print("\n"+"test1---------------------------"+"\n");
HttpParamersparamers=HttpParamers.httpGetParamers();
Stringresponse="";
try{
HttpServicehttpService=newHttpService(uri);
response=httpService.service("/posts",paramers);
}catch(Exceptione){
e.printStackTrace();
}
System.out.print(response);
}
//get方式请求数据
//请求地址:http://jsonplaceholder.typicode.com/posts?userId=5
@Ignore("暂时忽略")
@Test
publicvoidtest2(){
System.out.print("\n"+"test2---------------------------"+"\n");
HttpParamersparamers=HttpParamers.httpGetParamers();
paramers.addParam("userId","5");
Stringresponse="";
try{
HttpServicehttpService=newHttpService(uri);
response=httpService.service("/posts",paramers);
}catch(Exceptione){
e.printStackTrace();
}
System.out.print(response);
}
//post方式请求数据
//请求地址:http://jsonplaceholder.typicode.com/posts
@Test
publicvoidtest3(){
System.out.print("\n"+"test3---------------------------"+"\n");
HttpParamersparamers=HttpParamers.httpPostParamers();
paramers.addParam("time",String.valueOf(System.currentTimeMillis()));
Stringresponse="";
try{
HttpServicehttpService=newHttpService(uri);
response=httpService.service("/posts",paramers);
}catch(Exceptione){
e.printStackTrace();
}
System.out.print(response);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
