gpt4 book ai didi

java - HTTPClient - HTTP GET 因重定向 URL 中的 # anchor 而损坏

转载 作者:行者123 更新时间:2023-12-01 15:42:12 31 4
gpt4 key购买 nike

这有点奇怪。我正在使用 HTTPClient 4.1.2,似乎每当它发现 URL 中包含类似“#”的内容时,它就会对 URL 中的 # 进行完整获取。

例如,尝试获取 URL http://stks.co/eWt 将重定向到 URL http://news.ichinastock.com/2011/10/jack -ma-alibaba-has-prepared-200亿收购-yahoo/#.Tpw-xG61XjU.twitter。现在这个 URL 已上线,但问题是 HTTPClient 发送了一个 URI 设置为 URI 的 get 请求:/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 完全相同。

作为测试,将此原始 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)?

最佳答案

听起来他们的网络服务器坏了。 URI 规范规定,URI 的路径部分以数字符号 (#) 结尾。如果 Web 服务器考虑路径的 # 部分之后的任何内容,则它不遵循 URI 规范。

The path component contains data, usually organized in hierarchical form, that, along with data in the non-hierarchical query component, serves to identify a resource within the scope of the URI's scheme and naming authority (if any). The path is terminated by the first question mark ("?") or number sign ("#") character, or by the end of the URI." - RFC3986

我测试了一些流行的 Web 服务器,它们都可以正确解析这些 URI,忽略数字符号后面的部分。

不过,我没有任何好的解决方法建议。但至少现在你知道该责怪谁了。

关于java - HTTPClient - HTTP GET 因重定向 URL 中的 # anchor 而损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870938/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com