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();

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM