代码改变世界

以Raw的方式发送POST请求

2021-08-07 09:57  猎手家园  阅读(5773)  评论(0编辑  收藏  举报

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