有个项目,对方写的接口比较奇葩,要求必须以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就可以了。