2011-09-23 138 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作为示例。