Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 301永久搬迁_Java_Html_Http_Http Status Code 301 - Fatal编程技术网

Java 301永久搬迁

Java 301永久搬迁,java,html,http,http-status-code-301,Java,Html,Http,Http Status Code 301,我正试图通过Java中的URL获取HTML。但我所能做的就是永久搬家。另一个URL工作。发生了什么?这是我的代码: hh= new URL("http://hh.ru"); in = new BufferedReader( new InputStreamReader(hh.openStream())); while ((inputLine = in.readLine()) != null) { sb.

我正试图通过Java中的URL获取HTML。但我所能做的就是永久搬家。另一个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


        }

你的代码没有问题。该消息意味着
hh.ru
将永久移动到另一个域。

您将面临重定向到其他URL的问题。这是很正常的,网站可能有很多理由重定向您。只需遵循基于“位置”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,您应该自己执行。如果它困扰您,请查看其他实现,例如ApacheHTTP客户端。他们中的大多数人都能够自动执行重定向。

我测试了你的代码,它还可以,但当我使用“hh.ru”(与你的问题相同)时,当我使用lynx(命令行浏览器)连接到“hh.ru”时,它将向我显示它正在重定向到另一个url,然后向我显示它已永久移动,之后此警报:

“警报!:此客户端不包含对HTTPS URL的支持”

发现此答案很有用,并且由于可能会出现多个重定向(例如307然后301),因此有所改进

URLConnection URLConnection=url.openConnection();
String redirect=urlConnection.getHeaderField(“位置”);
对于(int i=0;i
我在服务器上运行特定文件时解决了我的问题。 而不是
http://hh.ru
, 我用了
http://hh.ru/index.php

它为我工作

< P>检查URL是否提供HTTP或HTTPS,考虑添加协议是您只使用域名,例如“代码> http(s)://doNeNe.com /资源名称< /COD> < /P>
阅读:

如果另一个url有效,那么您的代码没有问题,这是一个有效的url吗?当我访问该url时,我会得到一个301重定向。这里有一个链接指向重定向后的代码:但这显示了移动版本的HTML。看。我想要完整版本。看起来版本取决于您正在设置的用户代理。这一个在我的测试中给出了完整的版本:connection.setRequestProperty(“用户代理”、“Mozilla/5.0(Macintosh;U;Intel Mac OS X 10.4;en-US;rv:1.9.2.2)Gecko/20100316 Firefox/3.6.2”);如果它不起作用,我下次如何测试它?我的意思是,我应该使用哪种策略来修复这些参数?如果您希望获取与浏览器相同的页面,则应尽可能与浏览器相似的行为:1。遵循重定向并处理其他HTTP代码2。在发出请求时设置典型标题(用户代理、接受、推荐等)。如果需要,请使用cookies和maitain身份验证necesary@Jk1在考虑头字段“location”是重定向之前,最好先查看错误代码,不是吗?connection.getResponseCode()?当域从
http
移动到
https
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;
                    }
                }