使用HttpClient双斜杠访问URL

时间:2011-09-23 14:12:47

标签: java url httpclient

我在另一台服务器上做了这样的请求:

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

然而,HttpClient将example.com//foo更改为example.com/foo,因此其他服务器(不是我的)不理解该请求。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

双斜杠在URI的路径部分中不合法(参见RFC2396,第3.2,3.4节)。 '//'序列在URI中具有已定义的含义,它表示权限组件(服务器)。

我意识到这并没有回答你的问题,但实际上,HttpClient的行为符合HTTP和URL标准。您正在阅读的服务器不是。这似乎是之前报道的(https://issues.apache.org/jira/browse/HTTPCLIENT-727)并被HttpClient团队丢弃。

答案 1 :(得分:2)

事实上这是一个非法网址。

您是否尝试传递URI而不是String? 你试过了吗 / \ \ / ?或者URL可能等同于/default.asp/,/index.html/,/./,/?/,example.com / foo /等。

否则你需要破解消息来源。

答案 2 :(得分:0)

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

我设法使用Netty完成了它。我使用Netty编写了http客户端,并且我能够在路径中发送带有双斜杠(//)的请求。我使用SnoopClient作为样本。