Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Javascript 获取html错误301,返回完全相同的链接_Javascript_Html_Node.js - Fatal编程技术网

Javascript 获取html错误301,返回完全相同的链接

Javascript 获取html错误301,返回完全相同的链接,javascript,html,node.js,Javascript,Html,Node.js,我正在尝试使用Node.js应用程序获取HTML页面的内容。 我发现这个代码:(yojimbo答案),它似乎工作得很好。当我尝试启动代码时,我得到永久移动301的HTML结果,但重定向链接与我发送的链接相同 var util = require("util"), http = require("http"); var options = { host: "www.mylink.com", port: 80, path: "/folder/content.xml"

我正在尝试使用Node.js应用程序获取HTML页面的内容。 我发现这个代码:(yojimbo答案),它似乎工作得很好。当我尝试启动代码时,我得到永久移动301的HTML结果,但重定向链接与我发送的链接相同

var util = require("util"),
    http = require("http");

var options = {
    host: "www.mylink.com",
    port: 80,
    path: "/folder/content.xml"
};

var content = "";   

var req = http.request(options, function(res) {
    res.setEncoding("utf8");
    res.on("data", function (chunk) {
        content += chunk;
    });

    res.on("end", function () {
        util.log(content);
    });
});

req.end();
回报是:

30 Jul 13:08:52 - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<p>The document has moved <a href="http://mylink.com/folder/content.xml"<here</a>.</p>
<hr>
<adress>Apache/2.2.22 (Ubuntu) Server at www.mylink.com Port 80</adress>
</body></html>
30 Jul 13:08:52-
301永久搬迁

文档已移动301状态代码表示请求的资源已移动,客户端必须重定向到响应的位置标题中包含的链接。默认情况下,
http
模块不遵循重定向(状态代码3xx)

您可以使用该模块,该模块被称为执行重定向

请求被设计为使http成为可能的最简单的方式 电话。默认情况下,它支持HTTPS并遵循重定向

要手动执行此操作,请从响应中读取位置标头,并启动对该URI的新请求

var req = http.request(options, function(res) {
    res.setEncoding("utf8");
    if(res.statusCode === 301 || res.statusCode === 302) {
        var newRequestUri = res.headers.location;
        http.request({hostname: newRequestUri}, function(res) {
            //read response
        }
    }
    res.on("data", function (chunk) {
        content += chunk;
    });

    res.on("end", function () {
        util.log(content);
    });
});

如果“Location:”标题中的重定向链接与最初请求的链接相同,则服务器可能配置错误或已断开


请注意,响应体中的链接仅为方便人类而存在,不应被视为权威。只能使用HTTP响应头中的“位置:”字段来定位重定向的资源。

请注意,您请求
/folder/content.xml
并重定向到
/folder.content.xml
。这不是同一个url。抱歉,这是一个输入错误,我必须重新复制来自另一台计算机的邮件。这不是同一个url:请求应该是“www.mylink.com/folder/content.xml”,但响应中没有“www”。我也有同样的问题,但在我的例子中,服务器要求URL上有一个尾随的“/”。我可以这样做,但让我觉得有趣的是,我在重定向页面中得到了完全相同的链接。