zoukankan      html  css  js  c++  java
  • Java URL处理

    近日在用HttpClient访问http请求时,为了省力,直接采用

        HttpGet httpGet = new HttpGet(url);//HttpGet将使用Get方式发送请求URL
                HttpResponse response;
                response = client.execute(httpGet);
                HttpEntity entity = response.getEntity();//从response中获取结果,类型为HttpEntity

    前面几个接口调用都没问题,但这次却报如下错误

    java.net.URISyntaxException: Illegal character in query at index 55
    

     查找了一些网上资料,说地址中涉及了特殊字符,如‘|’‘&’等。所以不能直接用String代替URI来访问,所以先把String转成URL,再能过URL生成URI的方法来解决问题。

    URL的语法     

          URL与URI很像,两者的格式几乎差不多,但是我们接触的还是URL比较多,就以URL为例说明
          URL提供了一种访问定位因特网上任意资源的手段,但是这些资源可以通过不同的方法(例如HTTP、FTP、SMTP)来访问,不管怎样,他都基本上由9个部分构成:
          <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>
          scheme:获取资源使用的协议,例如http、ftp等,没有默认值
          user:password:用户名与密码,这个是一个特殊的存在,一般访问ftp时会用到,他显示的表明了访问资源的用户名与密码。但是这个可以不写,不写的话可能会让你输入用户名密码
          host:主机,访问那台主机,有时候可以是IP,有时候是主机名,例如www.baidu.com
          port:端口,访问主机时的端口,如果http访问默认80,可以省略。
          path:通过host:port我们能找到主机,但是主机上文件很多,通过path则可以定位具体文件。例如www.baidu.com/file/index.html。则path是/file/index.html,表示我们访问/file/index.html这个文件,他很像linux上的路径。
          params:这个很少见,主要作用就是像服务器提供额外的参数,用来表示本次请求的一些特性。例如ftp传输模式有两种,二进制和文本,你肯定不希望使用文本形式传输二进制图片,这样你的图片下载下来后可能没法看了。为了向应用程序提供更丰富的信息,URL中有个专门的部分来表示这种参数。例如ftp://file.qiandu.com/pub/guid.pdf;type=d其中的type=d就是params
          query:通过get方式请求的参数,例如:www.qiandu.com/index.html?username=dgh&passwd=123
          fragment:例如www.qiandu.com/index.html#1。当html页面比较长时,我们通常会将其分为好几段,#1就可以 快速定位到某一段。

    解决办法:

        URL url = new URL(strUrl);
        URI uri;
        uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), null);
        //带端口 用Authority
       HttpGet httpGet = new HttpGet(uri);//HttpGet将使用Get方式发送请求URL
  • 相关阅读:
    linux下启动和关闭网卡命令及DHCP上网
    python 编码问题
    paddlepaddle
    Convolutional Neural Network Architectures for Matching Natural Language Sentences
    deep learning RNN
    Learning Structured Representation for Text Classification via Reinforcement Learning 学习笔记
    Python IO密集型任务、计算密集型任务,以及多线程、多进程
    EM 算法最好的解释
    tensorflow 调参过程
    tensorflow 学习纪录(持续更新)
  • 原文地址:https://www.cnblogs.com/magic101/p/10276973.html
Copyright © 2011-2022 走看看