http 400错误【原】
http 400错误现象:
使用java代码访问某PDF文件地址, 报了http 400错误 ,浏览器却能正常访问 . 所以猜测浏览器对地址做了额外处理.
异常代码
String srcUrl = "http://www.abc.com/王小丫/go/home";
InputStream inputStream = new URL(srcUrl).openStream();
上述URL类的openStream()方法内部其实还是用到了URLConnection openConnection(URL u);
其实代码本身是没有任何问题的, 错就错在这个地址含有中文上了. 我的请求地址类似于http://www.abc.com/王小丫/go/home
解决方法
现在我们重点是需要对 http://www.abc.com/ 之后的 "王小丫/go/home" 做URLEncoder.encode(srcString, "UTF-8"); 处理. (其实重点只在"王小丫"这三个字上,但是为了以防路径中其它地址又存在中文,所以还是对域名www.abc.com/之后的所有路径全encode更保险.
使用与正则解析并处理后,得到的URL将是: http://www.abc.com/%E7%8E%8B%E5%B0%8F%E4%B8%AB%2Fgo%2Fhome
public static String handleUrl(String url) {
if (url != null) {
Pattern p = Pattern.compile("(http://.*?/)(.*)");
Matcher m = p.matcher(url);
if (m.find()) {
String str1 = m.group(1).trim();
String str2 = m.group(2).trim();
try {
str2 = URLEncoder.encode(str2, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
url = str1 + str2;
}
}
return url;
}
这个时候再用 以下代码去获取InputStream就再也不会报错了.
String srcUrl = "http://www.abc.com/%E7%8E%8B%E5%B0%8F%E4%B8%AB%2Fgo%2Fhome";
InputStream inputStream = new URL(srcUrl).openStream();
感觉空虚寂寞,只是因为你无所关注,无处付出。