当前位置: 首页 > 知识库问答 >
问题:

如何使用Got-in节点重定向最终url。js

颜光临
2023-03-14

我需要访问十万个或更多的url,并检查它们是否重定向到不同的最终url。

我正在使用https://www.scrapeulous.com这样做。但我需要编写一个简单的自定义函数来实现它。他使用了got图书馆。其中的文档在以下重定向选项中指出:

跟随重定向

类型:布尔值默认值:true

定义重定向响应是否应自动执行。

注意,如果服务器响应任何请求类型(POST、DELETE等)发送303,则Got将通过GET自动请求位置标头中指向的资源。这符合规范。

以及回应的注意事项。网址:

网址

类型:字符串

请求URL或重定向后的最终URL。

我尝试了以下代码,但没有用:

class Get extends HttpWorker {
  async crawl(url) {
    let result = await this.Got(encodeURI(url),
    {followRedirect: true});
    return result.url;
  }
}

我从未编写过任何javascript或节点。所以要温柔。让我们使用debianit。com,它重定向到experait。com作为我的例子。旁注:我还希望能够提供代码域而不是URL,以确定站点默认为http://还是https://。但对我来说,一次一个解决方案就足够了:)。

我还尝试返回整个结果对象并查看它,但没有发现任何有用的内容。

共有1个答案

钮实
2023-03-14

编辑:这一点要更清楚。

首先,有三种类型的重定向(根据这个答案):

  1. HTTP-作为响应头中的信息(代码为301、302、3xx)
  2. HTML-作为HTML中的标记(wikipedia:Meta refresh)
  3. JavaScript-作为类似于代码的窗口。位置=新的url

关于示例域,debianit。通用域名格式。它重定向到experait。com通过javascript。特别是这个脚本:

  <script>
   var url= "https://www.experaIT.com"; 
    window.location = url;
  </script>

得到的留档状态,它将遵循重定向:

如果服务器发送303以响应任何请求类型

换句话说,它似乎没有得到将遵循meta或javascript重定向。尽管您可以解析生成的html并从javascriptwindow.location或meta标签中提取url。

显然,使用BrowserWorker类而不是HttpWorker类也可以。这是一个很难用的代码。

class Render extends BrowserWorker {
  async crawl(url) {
    await this.page.goto(url, {
      waitUntil: 'networkidle2', // two open connections is okay
    });

    return await this.page.url();
  }
}

至于我的旁白,关于如何找出附加到域名的正确协议。根据这个答案,chromium没有与chrome相同的omnibox功能,但是,根据关于selenium python浏览器的这个答案,您可以通过添加http://来解决这个问题,并让chromium在页面是否重定向到https://时进行排序。

 类似资料:
  • 问题内容: 我正在使用该方法打开URL并获取网页的标记。其中一些网站使用301/302重定向将我重定向。我想知道我已重定向到的最终URL。我怎么能得到这个? 问题答案: 调用返回的文件对象的方法。根据文档: —返回所获取资源的URL,通常用于确定是否遵循了重定向 例:

  • 问题内容: 在页面重定向(最好使用curl或wget)之后,我需要获取最终的URL。 例如, http://google.com 可以重定向到 http://www.google.com 。 内容很容易获得(例如),但是我只对最终URL(在前一种情况下为http://www.google.com)感兴趣。 仅使用Linux内置工具有什么方法可以做到这一点?(仅命令行) 问题答案: 的选项和sub变

  • 问题内容: 因此,我正在使用net / http包。我正在获取一个我肯定知道要重定向的URL。在到达最终网址之前,它甚至可能重定向了几次。重定向在后台自动处理。 有没有一种简单的方法来确定最终的URL是什么,而没有涉及在http.Client对象上设置CheckRedirect字段的棘手的解决方法? 我想我应该提一提我想出了一种解决方法,但这有点of脚,因为它涉及使用全局变量并在自定义http.C

  • 问题内容: 从上一页收集到数据后,我想向客户显示另一页。但是我在服务器端重定向新URL时遇到麻烦。这是我的逻辑: 将带有POST操作的用户输入提交给服务器; 服务器运行函数saveChoice()将用户输入保存到数据库中; 保存用户输入后,服务器将新的URL发送给客户端。 当客户端获取新URL时,服务器读取数据库并取出保存的数据 我坚持执行第3步(这里是流程示例): 这是模板: 我可以知道如何重定

  • 问题内容: 我想做的是 找出重定向之后的最后一个/最终URL是什么 。 我不希望使用cURL。 我想坚持使用纯PHP(流包装器)。 现在,我有一个URL(比如说http://domain.test),并且我使用get_headers()从该页面获取特定的标题。get_headers也将返回多个标题(请参见下面的 Edit )。有没有办法使用这些标头来构建最终URL?还是有一个PHP函数可以自动执行

  • 问题内容: 任何人都可以建议我使用以下两种方法中使用REST重定向URL的最佳方法: 问题答案: 重定向有多种形式。该HTTP状态代码系列包含: 这些和其他代码具有不同的语义。正确的选择取决于您的情况。资源是否已永久移动到新位置?还是重定向只是临时的?