有個項目,對方寫的接口比較奇葩,要求必須以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就可以了。