2010-08-12 42 views
1

我正在嘗試通過HttpGet()方法處理以下URL:我需要做些什麼來解決「java.lang.IllegalArgumentException」?

https://graph.facebook.com/search?q=Cafe++Bakery&type=event&access_token=&type=event&access_token=239090718395|lqqOnRWlcJOb3QGp3G4HW2aqhlc

而且我得到以下異常:

java.lang.IllegalArgumentException: 
Invalid uri 'https://graph.facebook.com/search?q=Cafe++Bakery&type=event&access_token=&type=event&access_token=239090718395|lqqOnRWlcJOb3QGp3G4HW2aqhlc.': Invalid query 
    at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:222) 
    at org.apache.commons.httpclient.methods.GetMethod.<init>(GetMethod.java:89) 

現在,當我切&粘貼該URL到它的作品就好了browswer。我是 猜測它是某種需要發生的URL編碼,但我不確定我必須更改什麼才能從Http Client調用URL。

在此先感謝。

+1

嘗試使用URL編碼'|'。它的代碼是'%7C'。 – David 2010-08-12 11:26:38

+1

顯示代碼將有所幫助 – 2010-08-12 11:27:43

+0

您的問題的標題非常糟糕^^,就好像IllegalArgumentException僅在HttpGet中發生xD – velop 2013-07-05 11:01:07

回答

4

使用URLEncoder.encode()編碼的URL

+0

URLEncoder.encode()方法在API級別1中已棄用。 請改用encode(String,String)。 等效於編碼(s,「UTF-8」)。 – ozmank 2016-03-21 11:03:50

3

你要連接到的網址是不是按照RFC 1738有效的URL。字符'|'不能在URL中顯示未編碼;參見2.2節。使用URLEncoder.encode()不是答案。問題是URLEncoder.encode()不適用於此任務。而是設計用於將原始字符數據編碼爲「application/x-www-form-urlencoded」MIME格式。這將:

  • %-encode一個字符,如'/'':''?'等,除了麻煩'|'
  • %-encode任何'%'字符...造成雙重%編碼,並且
  • '+'字符替換任何空格字符,導致URL調整。

(請參閱Javadoc文檔UrlEncoder的精確規範什麼的字符編碼,以及如何。)

所有這些不正確/過分熱心的可能是有害的,這取決於如何在Web服務器處理網址。以安全性爲名,很多網絡服務器都處理不必要地對語法重要字符進行編碼的URL,並且將重複解碼直到沒有看到有效的%編碼序列。所以在很多情況下,你可以使用URLEncoder

但是沒有網絡服務器應該嘗試將'+'個字符轉換爲空格字符。而一些防守技巧可能會造成問題;例如如果您確實需要在URL中發送'%'數據字符。

那麼真正的解決方案是什麼?不幸的是這很難。正確的做法是使用容忍URL語法錯誤的解析器將URL解析爲其組成部分,然後依據URL(或URI)類將組件正確編碼爲URL/URI規範

或者,拒絕URL。畢竟它無效。

1

我有同樣的問題,url看起來正常,它可以是正常的,沒有可見的奇怪字符或任何東西。

解決的概率與發送URL通過這個:

return new String(maybeIncorrectUrl.getBytes(),"UTF-8"); 

maybeIncorrectUrl beeing問題的URL。

相關問題