zoukankan      html  css  js  c++  java
  • 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

    原创文章,转载请说明出处,谢谢合作
  • 相关阅读:
    ILM --interface logic model
    dbGet net trace instant pin
    LIST 列表
    Getopt::Long
    TCL Strings
    MBA 报考
    英语 口译考试
    微服务了解
    解析微服务架构(三):微服务重构应用及IBM解决方案
    解析微服务架构(二):融入微服务的企业集成架构
  • 原文地址:https://www.cnblogs.com/lwl80/p/15636297.html
Copyright © 2011-2022 走看看