我在另一台服务器上做了这样的请求:
HttpGet req = new HttpGet("http://example.com//foo");
new DefaultHttpClient().execute(req);
然而,HttpClient将example.com//foo
更改为example.com/foo
,因此其他服务器(不是我的)不理解该请求。
我该如何解决这个问题?
答案 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作为样本。