zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    基数排序
    kt-Mapper 笔记
    归并排序
    快速排序
    第十一天——递归(五)
    第十天——闭包(一)
    第八天——函数的嵌套以及gloabal、nonlocal(三)(重点:执行过程)
    第八天——函数的作用域(二)
    第八天——函数的动态参数(一)
    第七天——函数的参数(二)
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/10141214.html
Copyright © 2011-2022 走看看