2010-05-27 173 views
7

我正在嘗試使用DefaultHttpClientHttpGet向Web服務發出請求。不幸的是,網絡服務URL包含非法字符,例如{(例如:domain.com/service/{username))。很明顯,Web服務命名沒有寫得好,但我無法改變它。在URL中使用帶有非法字符的HttpGet

當我做HttpGet(url),我得到,我有一個非法的字符(即{和})。如果我在此之前對網址進行編碼,則不會出現任何錯誤,但請求會轉到不存在任何內容的其他網址。

url雖然具有非法字符,但它可以在瀏覽器中使用,但HttpGet實現不允許我使用它。我應該做什麼或使用什麼來避免這個問題?

+0

您是否嘗試過使用%7B和%7D,如下所示:domain.com/service/%7Busername%7D。或者就是你編碼的意思。 – sblundy 2010-05-27 17:47:23

回答

9

http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html

具體做法是:

String safeUrl = URLEncoder.encode("domain.com/service/{username}", "UTF-8"); 
+0

嗯。正如我在問題中所說的那樣,我嘗試過編碼(確切的說就像你的那樣),但它不起作用。我現在重試,成功!謝謝。 – 2010-05-27 17:54:22

+0

我第一次嘗試它並失敗是因爲連接超時過期。 – 2010-05-27 18:45:30

1

這個問題是舊的,但它幫助我,我只是想補充的人誰可能來通過我固定在我的應用程序這一問題的變化邁克的回覆。

String safeUrl = "domain.com/service/" + URLEncoder.encode("{username}", "UTF-8"); 

我發現編碼只是相關的部分工作,其中試圖編碼整個url導致我的錯誤。

1

我們不應該使用URLEncoder.encode作爲URL的地址部分,因爲它會將您的http://domain.com/ {username}錯誤地更改爲http%3A%2F%2Fdomain.com%2 {username},您應該知道它會替換所有空格用'+'表示對我來說用「%20」替換它更好。

這裏這個函數只對你的URL的最後部分進行編碼,該部分是{用戶名}或文件名或任何可能具有非法字符的內容。

String safeUrl(String inUrl) 
{ 
    int fileInd = inUrl.lastIndexOf('/') + 1; 
    String addr = inUrl.substring(0, fileInd); 
    String fileName = inUrl.substring(fileInd); 
    String outUrl=null; 

    try { 
     outUrl = addr + URLEncoder.encode(fileName, "UTF-8"); 
     outUrl = outUrl.replace("+", "%20"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return outUrl; 
}