我在获取某些网站的内容时遇到问题。当我尝试导航到重定向到另一个包含国际字符的 url 的 url 时,java 通常会收到错误 404。当我在浏览器中关注此 url 时,我会得到有效数据。
例如,我想导航到 hXXp://shar.es/cISmv(不能发布超过 2 个有效链接)
浏览器将我正确重定向到 hXXp://www.dandy-magazine.com/la-griffe-de-la-tour-d%E2%80%99argent 。从 wget 我可以看到,最初站点返回重定向 301,并带有现有的“位置:http ://www.dandy-magazine.com/la-griffe-de-la-tour-d%E2%80%99argent ”
在java中(重定向关闭)它返回带有“ Location: http://www.dandy-magazine.com/la-griffe-de-la-tour-dâargent
”的重定向301。使用 url 编码 ot 看起来像这样:“ http://www.dandy-magazine.com/la-griffe-de-la-tour-d%C3%A2%C2%80%C2%99argent
”。如您所见,这是完全不同的网站。
示例代码(基本上版本 1 和版本 2 做同样的事情):
// version 1 - let java handle redirects
URL url = new URL("http://shar.es/cISmv");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(true);
con.getResponseCode();
return con.getURL(); // returned url is not what it should be
// version 2 - I want to handle redirects
URL url = new URL("http://shar.es/cISmv");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(false);
con.getResponseCode();
String loc = con.getHeaderField("Location");
// here is the problem, loc is not initialized with a correct url
// returned String corresponds to url returned in version 1
谢谢帮助