在main方法中测试正常,但web调用这请求方法就会传值异常,中文全变成了问号
请求方法如下:
/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static InputStream sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
HttpsURLConnection httpUrlConnection = (HttpsURLConnection) conn;
httpUrlConnection.setHostnameVerifier(new MyHostnameVerifier());
// 设置通用的请求属性
httpUrlConnection.setRequestProperty("accept", "*/*");
httpUrlConnection.setRequestProperty("connection", "Keep-Alive");
httpUrlConnection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
httpUrlConnection.setRequestProperty("Content-Type", "application/xml");
// 发送POST请求必须设置如下两行
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
OutputStream outStrm = httpUrlConnection.getOutputStream();
if (param!=null && !"".equals(param)){
outStrm.write(param.getBytes("utf-8"));
}
outStrm.flush();
outStrm.close();
// 定义BufferedReader输入流来读取URL的响应
InputStream inStrm =httpUrlConnection.getInputStream();
return inStrm;
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return null;
}
不考虑URL转码的情况下,原因出在了tomcat 编码没有改为UTF-8
修改后中文即可正常
如果是安装版或解压版Tomcat,
进入conf文件夹,右键编辑server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
添加URIEncoding="UTF-8" 即可
如果是eclipse 中的tomcat
如下图所示操作:
添加后保存重启eclipse即可