http发送post请求中文乱码问题

 1 package com.lwl.util;
 2 
 3 import sun.misc.BASE64Encoder;
 4 
 5 import java.io.*;
 6 import java.net.HttpURLConnection;
 7 import java.net.URL;
 8 import java.net.URLConnection;
 9 import java.nio.charset.StandardCharsets;
10 
11 /**
12  * post请求
13  *
14  * @author liuwenlong
15  * @create 2021-11-30 22:25:00
16  */
17 @SuppressWarnings("all")
18 public class SendPost {
19 
20     /**
21      * Post请求一个地址
22      *
23      * @param URL         请求地址
24      * @param requestBody 请求的body
25      * @return
26      */
27     public String doPost(String URL, String requestBody) {
28         OutputStreamWriter out = null;
29         BufferedReader in = null;
30         StringBuilder result = new StringBuilder();
31         HttpURLConnection conn = null;
32         String username = "账号";
33         String password = "密码";
34         String input = username + ":" + password;
35         try {
36             java.net.URL url = new URL(URL);
37             conn = (HttpURLConnection) url.openConnection();
38             BASE64Encoder base = new BASE64Encoder();
39             String encodedPassword = base.encode(input.getBytes("UTF-8"));
40             System.out.println("加密后的密码:" + encodedPassword);
41             //将加密的账号密码放到请求头里,这里注意Basic后面要加空格
42             conn.setRequestProperty("Authorization", "Basic " + encodedPassword);
43             conn.setRequestMethod("POST");
44             //发送POST请求必须设置为true
45             conn.setDoOutput(true);
46             conn.setDoInput(true);
47             //设置连接超时时间和读取超时时间
48             conn.setConnectTimeout(3000);
49             conn.setReadTimeout(3000);
50             conn.setRequestProperty("Content-Type","application/json;charset=UTF-8");
51             conn.setRequestProperty("Accept", "application/json");
52             //获取输出流,写入请求的json报文
53             out = new OutputStreamWriter(conn.getOutputStream(),"utf-8");
54             System.out.println(requestBody);
55 
56             out.write(requestBody); //获取请求的body,
57             out.flush();
58             out.close();
59             //取得输入流,并使用Reader读取
60             if (200 == conn.getResponseCode()) {
61                 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
62                 String line;
63                 while ((line = in.readLine()) != null) {
64                     result.append(line);
65                     System.out.println(line);
66                 }
67             } else {
68                 System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
69             }
70         } catch (Exception e) {
71             e.printStackTrace();
72         } finally {
73             try {
74                 if (out != null) {
75                     out.close();
76                 }
77                 if (in != null) {
78                     in.close();
79                 }
80             } catch (IOException ioe) {
81                 ioe.printStackTrace();
82             }
83         }
84         return result.toString();
85     }
86 
87 }

注意,OutputStreamWriter 后面要添加 utf-8

原创文章,转载请说明出处,谢谢合作
原文地址:https://www.cnblogs.com/lwl80/p/15636297.html