有個專案,對方寫的介面比較奇葩,要求必須以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就可以了。