2011-09-23 140 views
3

我在做這樣的另一臺服務器上的請求:訪問URL以雙斜線與HttpClient的

HttpGet req = new HttpGet("http://example.com//foo"); 
new DefaultHttpClient().execute(req); 

但是,HttpClient的改變example.com//fooexample.com/foo,所以其他的服務器(這不是我)不瞭解請求。

我該如何解決這個問題?

+0

HI Bart,你有沒有設法讓這件事情起作用?你是否必須修改HttpClient代碼? –

回答

2

這實際上是非法的網址。

您是否嘗試傳遞一個URI而不是String? 你試過/ \ \ /?或者,該網址可能與/default.asp/,/index.html/,/./,/?/,example.com/foo/等同。

否則,您將需要破解源代碼。

3

雙斜線在URI的路徑部分不合法(請參閱RFC2396,第3.2節,3.4節)。 '//'序列在URI中具有定義的含義,它表示權威組件(服務器)。

我意識到這並不能回答你的問題,但事實上,HttpClient的行爲符合HTTP和URL標準。你正在閱讀的服務器不是。這似乎是以前報告的(https://issues.apache.org/jira/browse/HTTPCLIENT-727)並被HttpClient團隊拋棄。

0

我也想做同樣的事情,Apache Http客戶端不支持。

我設法使用Netty來完成它。我使用Netty編寫了http客戶端,並且可以使用雙斜槓(//)在路徑中發送請求。我用SnoopClient作爲示例。