7.17Java之HttpClient類發送application/x-www-form-urlencoded類型的請求


7.17Java之HttpClient類發送application/x-www-form-urlencoded類型的請求

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();
          }
      }
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM