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; } publicMap getParams(){ 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.Entry entry: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); } publicMap getParams(){ 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.Entry entry: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); } publicMap commonService(StringserviceUrl,HttpParamersparamers,HttpHeaderheader)throwsException{ Stringresponse=service(serviceUrl,paramers,header); try{ Map result=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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。