java如何根據(jù)PostMan發(fā)送請求設(shè)置接口請求工具類
java根據(jù)PostMan發(fā)送請求:設(shè)置接口請求工具類
我們使用java代碼進(jìn)行接口遠(yuǎn)程調(diào)用第三方接口時(shí),總會(huì)抒寫接口代碼,那么有這么多種方式進(jìn)行發(fā)送請求。那我們應(yīng)該怎么使用呢?
比如有webservice接口,比如有Post請求的接口,必須有Get請求的接口。比如傳的參數(shù)有xml的形式,比如傳的參數(shù)有json格式等等格式情況,那我們的接口請求代碼應(yīng)該如何區(qū)別,抒寫呢?
我們要根據(jù)postMan中的方式來,只要是能夠通過postMan發(fā)送成功的請求都可以使用
首先是我們的請求方式
第一點(diǎn):在postMan的請求方式有:GET、POST、PUT、DELETE請求。
第二點(diǎn):在PostMan中我們需要傳入url鏈接,那么new HttpGet(url)這里面的url就是鏈接地址。
GET:HttpGet httpGet = new HttpGet(url); POST:HttpPost method = new HttpPost(url); PUT:HttpPut put = new HttpPut(url); DELETE:HttpDelete delete = new HttpDelete(url);
第三點(diǎn):在PostMan中我們需要Params的時(shí)候:
HttpParams httpParams = new BasicHttpParams();
httpParams.setParameter("","");
httpParams.setParameter("","");
httpParams.setParameter("","");
method.setParams(httpParams);第四點(diǎn):在PostMan中我們需要設(shè)置Headers,其中方token或者字節(jié)編碼的時(shí)候很使用。
HttpPost method = new HttpPost(url);
method.addHeader("","");
method.addHeader("","");
method.addHeader("","");第五點(diǎn):在PostMan中我們需要設(shè)置Body,其中需要傳入?yún)?shù),不管是xml還是json都可以。那么我們需要設(shè)置兩個(gè)地方。
1、在第四點(diǎn)中的header中需要設(shè)置傳入?yún)?shù)的是xml還是json:
method.addHeader("Content-Type","application/json;");這里是json
method.addHeader("Content-Type","application/xml;");這里是xml2、在傳回來的參數(shù)中我們需要設(shè)置返回的數(shù)據(jù)類型和字符編碼集:param是發(fā)送的body參數(shù)。
StringEntity entity = new StringEntity(param, "utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json;");
method.setEntity(entity);//放入到method請求中。第六點(diǎn):這樣進(jìn)行發(fā)送請求:method是集合請求方式,Params,Headers,body參數(shù)以后的集合。然后進(jìn)行發(fā)送。
CloseableHttpClient httpClient = HttpClients.createDefault();//得到發(fā)送。 HttpResponse resultRep = httpClient.execute(method);
第七點(diǎn):在PostMan中返回的數(shù)據(jù),我們需要如下來接收:
/請求發(fā)送成功,并得到響應(yīng)/
if (resultRep.getStatusLine().getStatusCode() == 200) {
String str = "";
/**讀取服務(wù)器返回過來的json字符串?dāng)?shù)據(jù)**/
log.info("=========測試"+resultRep.toString());
String str4 = EntityUtils.toString(resultRep.getEntity());
log.info("========str4"+str4);
result = str4;
}舉例如下
第一種方法:
public static String getwebserviceNew(String method,String serviceUrl,String user,String pw,String param){
try {
//第一步:選擇請求方式:
PostMethod postMethod = null;
postMethod = new PostMethod();
postMethod.setPath(serviceUrl);
String auth = "bearer "+pw;
//第二步:設(shè)置header參數(shù)
postMethod.addRequestHeader("Authorization", auth);
postMethod.setRequestHeader("Content-Type", "text/xml") ;
//第三步:得到需要發(fā)送的body
String xmlInfo = getXmlInfo(method,user,pw,param);
//第四步:設(shè)置發(fā)送的參數(shù)編碼集:
postMethod.setRequestEntity(new StringRequestEntity(xmlInfo.toString(),"application/xml","UTF-8"));
org.apache.commons.httpclient.HttpClient httpClient = new org.apache.commons.httpclient.HttpClient();
//第五步:發(fā)送請求:
int response = httpClient.executeMethod(postMethod); // 執(zhí)行POST方法
log.info("response--接口狀態(tài)碼-->"+response);
String result = postMethod.getResponseBodyAsString() ;
log.info("result-接口返回值-->"+result);
return result;
} catch (Exception e) {
log.info("e----->"+e);
//logger.info("請求異常"+e.getMessage(),e);
throw new RuntimeException(e.getMessage());
}
}
private static String getXmlInfo(String method,String fydm,String token,String xml) {
StringBuilder sb = new StringBuilder();
sb.append("<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:szft='http://szft.tdh/'>");
sb.append("<soapenv:Header/>");
sb.append("<soapenv:Body>");
sb.append("<szft:"+method+">");
sb.append("<fydm>"+fydm+"</fydm>");
sb.append("<token>"+token+"</token>");
sb.append("<xml>"+xml+"</xml>");
sb.append("</szft:"+method+">");
sb.append("</soapenv:Body>");
sb.append("</soapenv:Envelope>");
return sb.toString();
}第二種方法:
/**
* http請求接口,獲取通達(dá)海token和獲取通達(dá)海代理人使用
* post請求
* @param url url地址
* @param param 請求參數(shù)
* @param token token
* @param ContentType 發(fā)送數(shù)據(jù)類型
* @return
* @throws IOException
* @throws ClientProtocolException
*/
public static String httpPostAllAgent(String url,String param,String token,String ContentType) throws ClientProtocolException, IOException{
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
url = URLDecoder.decode(url, "UTF-8");
CloseableHttpClient httpClient = HttpClients.createDefault();
String result = null;
HttpPost method = new HttpPost(url);
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("Content-Type", ContentType);
headers.put("Accept-Charset", "charset=utf-8");
headers.put("Authorization", token);
for (Map.Entry<String, Object> head : headers.entrySet()) {
method.addHeader(head.getKey(), String.valueOf(head.getValue()));
}
//設(shè)置請求訪問時(shí)間
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(1000*60).setConnectTimeout(1000*60).build();//設(shè)置請求和傳輸超時(shí)時(shí)間
method.setConfig(requestConfig);
if (null != param) {
StringEntity entity = new StringEntity(param, "utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType(ContentType);
method.setEntity(entity);
}
HttpResponse resultRep = httpClient.execute(method);
/**請求發(fā)送成功,并得到響應(yīng)**/
if (resultRep.getStatusLine().getStatusCode() == 200) {
String str = "";
/**讀取服務(wù)器返回過來的json字符串?dāng)?shù)據(jù)**/
log.info("=========測試"+resultRep.toString());
String str4 = EntityUtils.toString(resultRep.getEntity());
log.info("========str4"+str4);
result = str4;
}
return result;
}multipart/form-data請求方式:
public static String uploadFile(String url, Map<String, Object> mapData){
CloseableHttpClient httpClient = HttpClients.createDefault();
String result = "";
//每個(gè)post參數(shù)之間的分隔。隨意設(shè)定,只要不會(huì)和其他的字符串重復(fù)即可。
String boundary ="----WebKitFormBoundary5ZMULAAn6mngkXzn";
try {
HttpPost httpPost = new HttpPost(url);
//設(shè)置請求頭
httpPost.setHeader("Content-Type","multipart/form-data; boundary="+boundary);
//HttpEntity builder
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
//字符編碼
builder.setCharset(Charset.forName("UTF-8"));
//模擬瀏覽器
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//boundary
builder.setBoundary(boundary);
//multipart/form-data
// builder.addPart("multipartFile",new FileBody(filePath));
// binary
// builder.addBinaryBody("name=\"multipartFile\"; filename=\"test.docx\"", new FileInputStream(file), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
// //其他參數(shù)
for (String key : mapData.keySet()) {
builder.addTextBody(key, mapData.get(key).toString(), ContentType.create("text/plain", Consts.UTF_8));
}
//HttpEntity
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
// 執(zhí)行提交
HttpResponse response = httpClient.execute(httpPost);
//響應(yīng)
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
// 將響應(yīng)內(nèi)容轉(zhuǎn)換為字符串
result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.err.println("result"+result);
return result;
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java定時(shí)任務(wù)ScheduledThreadPoolExecutor示例詳解
這篇文章主要介紹了Java定時(shí)任務(wù)ScheduledThreadPoolExecutor示例詳解,這里使用scheduleAtFixedRate方法安排一個(gè)任務(wù),該任務(wù)是一個(gè) Runnable 匿名類,其run方法中調(diào)用了new LoginViewTimeTask().loginStatisticsHandle()方法,需要的朋友可以參考下2023-11-11
springboot項(xiàng)目maven引入本地包沒打包進(jìn)去的解決方案
這篇文章主要介紹了springboot項(xiàng)目maven引入本地包沒打包進(jìn)去的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-09-09
SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例
這篇文章主要給大家介紹了關(guān)于SpringBoot接受前臺(tái)參數(shù)的6種方式以及統(tǒng)一響應(yīng)的相關(guān)資料,前端負(fù)責(zé)展示頁面和用戶交互,而后端則負(fù)責(zé)處理業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ),在這種架構(gòu)下前端需要將用戶輸入的數(shù)據(jù)發(fā)送給后端進(jìn)行處理,需要的朋友可以參考下2023-12-12
如何解決springmvc文件下載,內(nèi)容損壞的問題
這篇文章主要介紹了解決springmvc文件下載,內(nèi)容損壞的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
詳解SpringBoot上傳圖片到阿里云的OSS對象存儲(chǔ)中
這篇文章主要介紹了SpringBoot上傳圖片到阿里云的OSS對象存儲(chǔ)中,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
利用consul在spring boot中實(shí)現(xiàn)分布式鎖場景分析
這篇文章通過場景分析給大家介紹如何利用consul在spring boot中實(shí)現(xiàn)簡單的分布式鎖功能,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-09-09
Java基礎(chǔ)之JDK1.8新特性lambda表達(dá)式詳解
函數(shù)式接口有且僅有一個(gè)抽象方法,但是可以有多個(gè)非抽象方法的接口,函數(shù)式接口可以被隱式轉(zhuǎn)換為lambda表達(dá)式,這篇文章主要介紹了Java基礎(chǔ)之lambda表達(dá)式(JDK1.8新特性),需要的朋友可以參考下2023-08-08
Android、iOS和Java通用的AES128加密解密示例代碼
現(xiàn)在很多App在與服務(wù)器接口的請求和響應(yīng)過程中,為了安全都會(huì)涉及到加密和解密的問題,如果不加的話就會(huì)是明文的,即使加了GZIP也可以被直接解壓成明文。如果同時(shí)有Android和IOS的App的話、必須要保證加密和解密的算法一致、不然后臺(tái)沒法處理,下面通過這篇文章學(xué)習(xí)下。2016-11-11
java高并發(fā)下CopyOnWriteArrayList替代ArrayList
這篇文章主要為大家介紹了java高并發(fā)下CopyOnWriteArrayList替代ArrayList的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

