我正在尝试通过Java在URL中获取HTML。但301 Moved Permanently
就是我所拥有的一切。另一个URL工作。怎么了?这是我的代码:
hh= new URL("http://hh.ru");
in = new BufferedReader(
new InputStreamReader(hh.openStream()));
while ((inputLine = in.readLine()) != null) {
sb.append(inputLine).append("\n");
str=sb.toString();//returns 301
}
答案 0 :(得分:12)
您正面临重定向到其他网址的问题。这很正常,网站可能有很多理由重定向你。只需遵循基于“位置”HTTP标头的重定向:
URL hh= new URL("http://hh.ru");
URLConnection connection = hh.openConnection();
String redirect = connection.getHeaderField("Location");
if (redirect != null){
connection = new URL(redirect).openConnection();
}
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
System.out.println();
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
您的浏览器会自动跟踪重定向,但使用URLConnection时,您应该自行完成。如果遇到困难,请查看其他Java HTTP client实现,例如Apache HTTP Client。他们中的大多数都能够自动跟踪重定向。
答案 1 :(得分:1)
发现这个答案很有用,并且由于可能出现多次重定向而有所改善(例如307然后是301)。
URLConnection urlConnection = url.openConnection();
String redirect = urlConnection.getHeaderField("Location");
for (int i = 0; i < MAX_REDIRECTS ; i++) {
if (redirect != null) {
urlConnection = new URL(redirect).openConnection();
redirect = urlConnection.getHeaderField("Location");
} else {
break;
}
}
答案 2 :(得分:0)
您的代码没有任何问题。该消息表示hh.ru
已永久移至另一个域。
答案 3 :(得分:0)
我测试了你的代码,没关系,但是当我使用“hh.ru”时,和你的问题一样,当我使用lynx(命令行浏览器)连接到“hh.ru”时,它会显示我正在重定向到另一个网址然后告诉我它被永久移动,然后发出此警报:
“警告!:此客户端不包含对HTTPS URL的支持”
答案 4 :(得分:0)
当我在服务器上运行特定文件时,我解决了我的问题。
而不是http://hh.ru
,
我用了http://hh.ru/index.php
。
它对我有用
答案 5 :(得分:0)
检查提供的URL是HTTP还是HTTPS,请考虑添加协议,如果您仅使用http(s)://domainname.com/resource-name
之类的域名