这有点奇怪。我正在使用HTTPClient 4.1.2,似乎每当它找到带有类似“#”的URL时,它就会在URL中完全获得#。
例如,尝试获取网址http://stks.co/eWt
会重定向到网址http://news.ichinastock.com/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitter
。现在这个URL是实时的,但问题是HTTPClient发送一个get请求,其URI设置为URI: /2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitter
,这会导致服务器发回404找不到的页面。
查看IE,Firefox和cURL发送的GET,它们都从URI的末尾删除了#...所以例如cURL GET请求URI被设置为URI:/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/
- 所有#...都被删除了。这与http://stks.co/eWt
的完全相同的条目网址。
作为测试,将此原始URL发送到HTTPClient(即HttpGet httpget = new HttpGet("http://news.ichinastock.com/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitter");
)会得到相同的404未找到的结果。
所以问题是HTTPClient中是否有任何可以设置的设置,以便可以从URL中自动删除尾随#...等内容。或者我将如何从URL手动删除它(请记住,我还需要捕获所有重定向URL)?
答案 0 :(得分:1)
听起来他们的网络服务器坏了。 URI规范说数字符号(#)终止URI的路径部分。如果Web服务器在路径的#部分之后考虑任何内容,则它不遵循URI规范。
路径组件包含通常以分层形式组织的数据,该数据与非分层查询组件中的数据一起用于标识URI方案和命名权限(如果有)范围内的资源。路径由第一个问号(“?”)或数字符号(“#”)字符终止,或由URI的末尾终止。“ - RFC3986
我测试了一些流行的Web服务器,它们都正确地解析了这些URI,忽略了数字符号后面的部分。
我对解决方法没有任何好的建议。但至少现在你知道应该责怪谁。
答案 1 :(得分:0)
注意:哈希(和哈希)之后的所有字符串都不会发送到服务器。 URL中的哈希值适用于浏览器使用而不是服务器。