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

Getting html error 301, which return exact same link

本文关键字:链接 返回 html 错误 获取      更新时间:2023-09-26

我正在尝试使用Node.js应用程序获取HTML页面的内容。我发现了这样的代码:在Node.js/Express中;下载";页面并获取其HTML?(yojimbo回答),这似乎很有效。当我尝试启动代码时,我得到了301 Moved Permanently的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>

它是永久地移到同一个地方,还是只是服务器上的某种安全性?或者我在代码中犯了错误?(但它适用于谷歌和我测试过的所有其他网站)。

我怀疑是".xml"造成了问题,因为我甚至用pdf格式的页面进行了测试,没有问题(只是一堆不可读的字符)。

在与客户讨论后,我将以另一种方式(直接下载)获得页面,这还可以。我仍然接受c.Pu.1的答案,但我仍然想知道为什么重定向链接与应用程序遵循的链接相同。

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

您可以使用请求模块,据说它可以执行重定向。

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

要手动执行此操作,请从响应中读取Location标头,并向该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响应标头中的"Location:"字段才能用于定位重定向的资源。