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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM