以Raw的方式傳送POST請求

獵手家園發表於2021-08-07

有個專案,對方寫的介面比較奇葩,要求必須以Raw的方式傳參,直接上程式碼吧。

 1 /**
 2      * 以raw形式傳送post請求
 3      *
 4      * @param url    訪問地址
 5      * @param param  需要傳輸json引數(可以透過json工具轉換成String)
 6      * @param header header 引數
 7      * @return 返回網頁返回的資料
 8      */
 9     public static String doPostRaw(String url, String param, Map<String, String> header) {
10 
11         OutputStreamWriter out;
12         BufferedReader in;
13         StringBuilder result = new StringBuilder();
14 
15         try {
16             URL realUrl = new URL(url);
17 
18             // 開啟和URL之間的連線
19             HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
20 
21             // 設定超時時間
22             conn.setConnectTimeout(5000);
23             conn.setReadTimeout(15000);
24 
25             // 設定通用的請求屬性
26             conn.setRequestMethod("POST");
27             conn.addRequestProperty("Content-Type", "application/json");
28             conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
29             conn.setRequestProperty("Accept", "*/*");
30             conn.setRequestProperty("Accept-Encoding", "gzip,deflate,br");
31             conn.setRequestProperty("Connection", "Keep-Alive");
32 
33             // 如有特殊屬性
34             if (header != null) {
35                 for (Map.Entry<String, String> entry : header.entrySet()) {
36                     conn.setRequestProperty(entry.getKey(), entry.getValue());
37                 }
38             }
39 
40             // 傳送POST請求必須設定如下兩行
41             conn.setDoOutput(true);
42             conn.setDoInput(true);
43 
44             // 獲取URLConnection物件對應的輸出流
45             out = new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8);// utf-8編碼
46 
47             // 傳送請求引數
48             out.write(param);
49 
50             // flush輸出流的緩衝
51             out.flush();
52 
53             // 定義BufferedReader輸入流來讀取URL的響應
54             in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
55 
56             String line;
57             while ((line = in.readLine()) != null) {
58                 result.append(line);
59             }
60 
61             out.close();
62             in.close();
63             conn.disconnect();
64 
65         } catch (Exception e) {
66             e.printStackTrace();
67         }
68 
69         return result.toString();
70     }

 

引數說明:

header頭引數,如果有特殊頭引數可以定製,如果沒有傳null就可以了。

 

相關文章