application/x-www-form-urlencoded
首先了解這個類型的傳參方式: 當action為get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數據轉換成一個字串(name1=value1&name2=value2…),然后把這個字串append到url后面,用?分割,加載這個新的url。
<from>
標簽中有一個屬性為action,該屬性定義了:當提交表單時向何處發送表單數據。
這里一定要搞清楚x-www-form-urlencoded的傳參方式和該方式下的POST請求和GET請求的區別:
這種post格式跟get的區別在於,get把轉換、拼接完的字符串用‘?’直接與表單的action連接作為URL使用,所以請求體里沒有數據;而post把轉換、拼接后的字符串放在了請求體里,不會在瀏覽器的地址欄顯示
測試接口
首先拿到接口以后分析接口地址和請求方式:
可以看到請求方式是POST請求方式:
分析請求頭類型:
可以看到是以表單的默認形式進行的提交
查看表單格式:
這里可以看到該接口是將參數拼成了字符串然后append到url后面在請求引用然后通過該引用調用的第三方接口。
具體的調用接口實現
//分析接口需要用到的屬性
/*
1、Url
2、Cookie
3、Params
*/
//定義接口地址
private static final String Url = "";
//捕獲到本次登錄的Cookie值
private static final String Cookie = "";
//定義參數格式
private static final String Params = "platform=shopee&platform_accountid=12034&startTime=2021-07-16&endTime=2021-07-17&orderid=";
具體方法實現:
//由上面分析了該接口的傳參形式,所以我們需要構造好一個POST請求體里面傳參數
//構造Cookie存儲
//創建Cookie存儲
CookieStore cookieStore = new BasicCookieStore();
//設置Cookie值
BasicClientCookie cookie = new BasicClientCookie("Cookie", Cookie);
//設置域
cookie.setDomain("");
//設置路徑
cookie.setPath("/");
//將設置好的Cookie放入接口引用中
cookieStore.addCookie(cookie);
//使用HttpClient創建登錄客戶端
CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
//創建響應模型,通過請求對象獲取響應對象--->發送登錄請求
CloseableHttpResponse response = null;
創建請求體:(由於是直接把POST請求體的內容轉換拼接,所以無需構造對象參數容器)--->上一篇內容是通過構造參數對象容器將容器內容放入Body中進行的傳參
/*創建請求實體*/
try{
//創建登錄方式引用
HttpPost httpPost = new HttpPost(url);
//設置請求配置
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(3000).setConnectionRequestTimeout(3000).setSocketTimeout(3000).build();
//設置POST請求配置
httpPost.setConfig(requestConfig);
//添加請求頭
httpPost.addHeader("Content-Type", "x-www-form-urlencoded; charset=utf-8");
//設置接收形式
httpPost.setHeader("Accept", "application/json");
System.out.println(httpPost);
//創建登錄實體
httpPost.setEntity(new StringEntity(params, Charset.forName("UTF-8")));
System.out.println(httpPost);
//判斷請求實體情況
if (httpPost == null){
System.out.println("請求實體為空!");
return;
}else {
response = httpClient.execute(httpPost);
}
}catch (Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
創建響應對象實體:
/*創建響應實體*/
try {
//從響應模型中獲得響應實體
HttpEntity responseEntity = response.getEntity();
//打印響應狀態
System.out.println("響應狀態為:" + responseEntity.getContentType());
if (responseEntity!=null){
System.out.println("響應內容長度為:" + responseEntity.getContentLength());
System.out.println("響應內容為:" + EntityUtils.toString(responseEntity));
}
}catch (Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}finally {
//關閉資源
try {
//判斷客戶端實體
if (httpClient != null) {
httpClient.close();
}
//判斷響應實體
if (response != null) {
response.close();
}
}catch (Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}