URLConnection发送post请求乱码

在用UrlConnection进行网络编程,往往出现请求参数出现中文时,中文乱码,需要在请求中指定请求编码格式。

一、检查

1、检查一下有没有指定编码格式
2、检查使用输出流的方式(是否已转码)

二、代码

public static String sendPost(String url, String paramsStr, String encode) {OutputStreamWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性(如编码,文件大小,附加参数等)conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("charset", encode);conn.setRequestProperty("Authorization", "Basic xxxxxx");conn.setRequestProperty("Accept-Charset", encode);conn.setRequestProperty("contentType", encode);// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);out = new OutputStreamWriter(conn.getOutputStream(), encode);out.write(paramsStr);out.flush();// 获取响应in = new BufferedReader(new InputStreamReader(conn.getInputStream(), encode));String lines;StringBuffer sb = new StringBuffer();while ((lines = in.readLine()) != null) {lines = new String(lines.getBytes(encode), encode);lines = URLDecoder.decode(URLDecoder.decode(lines, encode), encode);sb.append(lines);}result = sb.toString();} catch (Exception e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;
}

三、总结:

  • 设置请求编码格式

    connection.setRequestProperty("Accept-Charset", "GBK");
    connection.setRequestProperty("contentType", "GBK");
    
  • 使用可转码的输出流

    PrintWriter out = new PrintWriter(connection.getOutputStream());

    OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), encode); 
    out.write(paramsStr);
    

    or

    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
    out.wait(paramsStr.getBytes(encode));
    

一般这种请求,要么就是没有给请求声明编码(客户端:服务器,我支持或我要求返回xxx编码!),要么就是没有在请求前给参数转码(服务器:你个都比,我要UTF的,你客户端是GBK的,你不转码我获取的是乱码阿~)。大多情况都是后者。

四、更多

https://blog.csdn.net/u010001043/article/details/53203576


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部