java - HttpURLConnection 发送post请求
最近在做访问第三方接口的模块,虽然之前做过,而且有很多工具类的支持,但是我也遇到了一个让我痛苦了半天的‘坑’
首先先上最终好使并实现的代码:
public static String postJson(String requestUrl, String params) throws Exception {
System.out.println(params);
System.out.println("发送的连接为:" + requestUrl);
URL url = new URL(requestUrl);
// 打开和URL之间的连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
System.out.println("打开链接,开始发送请求" + new Date().getTime() / 1000);
connection.setRequestMethod("POST");
// 设置通用的请求属性
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setUseCaches(false);
connection.setDoOutput(true);
connection.setDoInput(true);
// 得到请求的输出流对象
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(params.getBytes("UTF-8"));
out.flush();
out.close();
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> headers = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : headers.keySet()) {
System.out.println(key + "--->" + headers.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
BufferedReader in = null;
if (requestUrl.contains("nlp"))
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));
else
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String result = "";
String getLine;
while ((getLine = in.readLine()) != null) {
result += getLine;
}
in.close();
System.out.println("请求结束" + new Date().getTime() / 1000);
System.out.println("result:" + result);
return result;
}
这是我最终好使的代码,解决的坑是啥呢,先放报错的信息,大致是这个异常:
Could not read document: Invalid UTF-8 start byte 0xbd\n at [Source: java.io.PushbackInputStream@29bb94d1; line: 1
解决方式:见 https://blog.csdn.net/weixin_36775115/article/details/89918068