更新時(shí)間:2020-05-15 15:52:46 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2508次
“你調(diào)用別人的接口”:
這里提供的方法是POST和GET的方法.
使用HttpClient發(fā)送請(qǐng)求、接收響應(yīng)很簡(jiǎn)單,一般需要如下幾步即可。
1. 創(chuàng)建HttpClient對(duì)象。
2. 創(chuàng)建請(qǐng)求方法的實(shí)例,并指定請(qǐng)求URL。如果需要發(fā)送GET請(qǐng)求,創(chuàng)建HttpGet對(duì)象;如果需要發(fā)送POST請(qǐng)求,創(chuàng)建HttpPost對(duì)象。
3. 如果需要發(fā)送請(qǐng)求參數(shù),我使用的是List<NameValuePair>,采用鍵值對(duì)的形式
4. 釋放連接。無論執(zhí)行方法是否成功,都必須釋放連接
來個(gè)代碼進(jìn)行討論把,我會(huì)在代碼里面進(jìn)行詳細(xì)的講解,這里主要是post和get的方法.
1.先來一個(gè)常量類:
/*************************************************接口部分**************************************************/???
????/**
?????*?請(qǐng)求正常
?????*/
????public?static?final?int?SUCCESS?=?200;
????
????/**
?????*?請(qǐng)求參數(shù)有誤
?????*/
????public?static?final?int?PARAMETER_EXCEPTION?=?400;
????
????/**
?????*?認(rèn)證失敗
?????*/
????public?static?final?int?AUTHENTICATION_FAILED?=?401;
????
????/**
?????*?請(qǐng)求地址錯(cuò)誤或不存在
?????*/
????public?static?final?int?ADDRESS_EXCEPTION?=?404;
????
????/**
?????*?請(qǐng)求地址錯(cuò)誤或不存在
?????*/
????public?static?final?int?SERVER_EXCEPTION?=?500;
????
????/**
?????*?接口狀態(tài)碼判斷
?????*/
????public?static?String?putThrowException(int?statusCode)?{
????????String?e?=?"";
????????if(PARAMETER_EXCEPTION?==?statusCode)?{
????????????e?=?"請(qǐng)求參數(shù)有誤";
????????}else?if(AUTHENTICATION_FAILED?==?statusCode)?{
????????????e?=?"認(rèn)證失敗";
????????}else?if(ADDRESS_EXCEPTION?==?statusCode)?{
????????????e?=?"請(qǐng)求地址錯(cuò)誤或不存在";
????????}else?if(SERVER_EXCEPTION?==?statusCode)?{
????????????e?=?"服務(wù)器狀態(tài)異常";
????????}
????????return?e;
????}????/**
?????*?Token元素
?????*/
????public?static?final?String?USERNAME?=?"tianxun";
????public?static?final?String?PASSWORD?=?"123456";
????public?static?final?String?token?=?"dGlhbnh1biUzQTEyMzQ1Ng==";
2.接口類:
package?cn.tisson.bycs.utils;
import?java.io.IOException;
import?java.io.UnsupportedEncodingException;
import?java.net.URLEncoder;
import?java.net.UnknownHostException;
import?java.util.ArrayList;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;
import?javax.net.ssl.SSLException;
import?org.apache.commons.httpclient.HttpException;
import?org.apache.http.Consts;
import?org.apache.http.HttpEntity;
import?org.apache.http.HttpEntityEnclosingRequest;
import?org.apache.http.HttpRequest;
import?org.apache.http.NameValuePair;
import?org.apache.http.NoHttpResponseException;
import?org.apache.http.client.HttpRequestRetryHandler;
import?org.apache.http.client.config.RequestConfig;
import?org.apache.http.client.entity.UrlEncodedFormEntity;
import?org.apache.http.client.methods.CloseableHttpResponse;
import?org.apache.http.client.methods.HttpGet;
import?org.apache.http.client.methods.HttpPost;
import?org.apache.http.client.protocol.HttpClientContext;
import?org.apache.http.client.utils.URIUtils;
import?org.apache.http.client.utils.URLEncodedUtils;
import?org.apache.http.conn.ConnectTimeoutException;
import?org.apache.http.impl.client.CloseableHttpClient;
import?org.apache.http.impl.client.HttpClients;
import?org.apache.http.message.BasicNameValuePair;
import?org.apache.http.protocol.HttpContext;
import?org.apache.http.util.EntityUtils;
import?org.slf4j.Logger;
import?org.slf4j.LoggerFactory;
import?org.apache.commons.codec.binary.Base64;
import?cn.tisson.bycs.cst.Constants;
/**
?*?????接口常用工具類
?*?@author?zahngrh
?*
?*/
public?class?serviceUtils?{
????
????private?static?final?Logger?logger?=?LoggerFactory.getLogger(serviceUtils.class);
????
????/**
?????*?Base64加密Token
?????*?@return
?????*?@throws?UnsupportedEncodingException
?????*/
????public?static?String?getBase64()?throws?UnsupportedEncodingException?{
????????String?str?=?Constants.USERNAME+":"+Constants.PASSWORD;
????????final?byte[]?textByte?=?str.getBytes("UTF-8");
????????String?result=?Base64.encodeBase64String(textByte);
????????return?result;
????}
????public?static?void?main(String[]?args)?throws?UnsupportedEncodingException?{
????????System.out.println(getBase64());
????}
????
????/**
?????*?設(shè)置超時(shí)重試
?????*/
????public?static?HttpRequestRetryHandler?myRetryHandler?=?new?HttpRequestRetryHandler()?{
????????@Override
????????public?boolean?retryRequest(IOException?exception,int?executionCount,HttpContext?context)?{
????????????System.out.println("............................第"+executionCount+"次重試");
????????if?(executionCount?>=?3)?{
????????????return?false;
????????}else?if(exception?instanceof?UnknownHostException?||?exception?instanceof?ConnectTimeoutException
????????????????||?!(exception?instanceof?SSLException)?||?exception?instanceof?NoHttpResponseException)?{
????????????return?true;
????????}
????????????HttpClientContext?clientContext?=?HttpClientContext.adapt(context);
????????????HttpRequest?request?=?clientContext.getRequest();
????????????boolean?idempotent?=?!(request?instanceof?HttpEntityEnclosingRequest);
????????????if?(idempotent)?{
????????????//如果請(qǐng)求被認(rèn)為是等冪,則重試
????????????????return?true;
????????????}
????????????return?false;
????????}
????};
????
????/**
?????*?接口請(qǐng)求工具類
?????*/
????public?static?Map<String,String>?requestResult(Map<String,String>?map,String?putType,String?url)?throws?HttpException,?IOException?{????????????
????????CloseableHttpResponse?response?=?null;????????
????????int?statusCode?=?0;?//?狀態(tài)碼??????
????????String?content?="";?//?返回結(jié)果????????
????????Map<String,String>?resultMap?=?new?HashMap();????????
????????//?創(chuàng)建httpclient對(duì)象
????????CloseableHttpClient?httpClient?=?HttpClients.createDefault();????????
????????//?設(shè)置參數(shù)
????????List<NameValuePair>?nameValuePairs?=?new?ArrayList<NameValuePair>();????????
????????for(String?key:map.keySet())?{
????????????nameValuePairs.add(new?BasicNameValuePair(key,map.get(key).toString()));
????????}????????
????????String?str?=?EntityUtils.toString(new?UrlEncodedFormEntity(nameValuePairs,Consts.UTF_8));????????
????????//?設(shè)置超時(shí)時(shí)間
????????RequestConfig?requestConfig?=?RequestConfig.custom()
????????????????.setSocketTimeout(5000)
????????????????.setConnectTimeout(5000)
????????????????.setConnectionRequestTimeout(5000)
????????????????.build();
????????????????
????????if(putType?!=?null?&&?"post".equals(putType)){????????????
????????????//?請(qǐng)求URL地址
????????????HttpPost?httpPost?=?new?HttpPost(url);????????????
????????????httpPost.setEntity(new?UrlEncodedFormEntity(nameValuePairs,Consts.UTF_8));????????????
????????????//?設(shè)置Token
????????????httpPost.setHeader("token",Constants.token);???????????
????????????httpPost.setConfig(requestConfig);???????????
????????????httpClient?=?HttpClients.custom().setRetryHandler(serviceUtils.myRetryHandler).build();????????????
????????????try?{
????????????????response?=?httpClient.execute(httpPost);????????????????
????????????????//?接收狀態(tài)碼
????????????????statusCode?=?response.getStatusLine().getStatusCode();????????????????
????????????}?catch?(Exception?e)?{
????????????????e.printStackTrace();
????????????}????????????
????????}else?if(putType?!=?null?&&?"get".equals(putType))?{????????????
????????????//?請(qǐng)求URL地址
????????????HttpGet?httpGet?=?new?HttpGet(url+"?"+str);
????????????//?設(shè)置Token
????????????httpGet.setHeader("token",Constants.token);
????????????httpGet.setConfig(requestConfig);
????????????httpClient?=?HttpClients.custom().setRetryHandler(serviceUtils.myRetryHandler).build();
????????????try?{
????????????????response?=?httpClient.execute(httpGet);
????????????????//?接收狀態(tài)碼
????????????????statusCode?=?response.getStatusLine().getStatusCode();
????????????}?catch?(Exception?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????????
????????//?判斷狀態(tài)碼
????????if?(Constants.SUCCESS?==?statusCode)?{
????????????HttpEntity?entity?=?response.getEntity();
????????????content?=?EntityUtils.toString(entity,?"utf-8");
????????????logger.info(content);
????????}?else?{
????????????//logger.error("狀態(tài)碼:"+Constants.putThrowException(statusCode));
????????}?
????????resultMap.put("statusCode",?String.valueOf(statusCode));
????????resultMap.put("result",?content);
????????try?{
????????????//?釋放client
????????????httpClient.close();
????????}?catch?(IOException?e)?{
????????????logger.error("http接口調(diào)用異常:url?is::"?+?url,?e);
????????}???????????
????????return?resultMap;
????}??
}
對(duì)于接口類的調(diào)用:
/**
*根據(jù)業(yè)務(wù)使用接口,對(duì)返回值進(jìn)行自我的調(diào)整
**/
public?static?void?main(String[]?args)?throws?HttpException,?IOException?{
????????Map<String,String>?paraMap?=?new?HashMap();
????????paraMap.put("type",?"1");
????????System.out.println(serviceUtils.requestResult(paraMap,?"post",?"https://api.apiopen.top/musicRankingsDetails"));
????}
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“技術(shù)知識(shí)分享,Java接口調(diào)用的處理”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)