如何在不使用 Perl 和 LWP 获取页面的情况下获得最终 URL?

2023-12-25

我正在做一些网页抓取 http://en.wikipedia.org/wiki/Web_scraping使用 Perl 的 LWP。我需要处理一组 URL,其中一些可能会重定向(一次或多次)。

如何使用 HEAD 方法获得解决所有重定向的最终 URL?


如果您使用全功能版本LWP::用户代理 http://search.cpan.org/%7Egaas/libwww-perl-5.834/lib/LWP/UserAgent.pm,那么返回的响应是一个实例HTTP::响应 http://search.cpan.org/%7Egaas/libwww-perl-5.834/lib/HTTP/Response.pm反过来又具有一个属性HTTP::请求 http://search.cpan.org/%7Egaas/libwww-perl-5.834/lib/HTTP/Request.pm。请注意,这是NOT必须与您使用 URL 集中的原始 URL 创建的 HTTP::Request 相同,如 HTTP::Response 文档中有关在响应实例中检索请求实例的方法中所述:

$r->请求( $请求 )

这用于获取/设置请求属性。请求属性是对引起此响应的请求的引用。它不必与传递给 $ua->request() 方法的请求相同,因为其间可能存在重定向和授权重试。

一旦获得了 request 对象,就可以使用 uri 方法来获取 URI。如果使用重定向,则 URI 是遵循重定向链的结果。

这是一个经过测试和验证的 Perl 脚本,它为您提供了所需的框架:

#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;

my $ua;  # Instance of LWP::UserAgent
my $req; # Instance of (original) request
my $res; # Instance of HTTP::Response returned via request method

$ua = LWP::UserAgent->new;
$ua->agent("$0/0.1 " . $ua->agent);

$req = HTTP::Request->new(HEAD => 'http://www.ecu.edu/wllc');
$req->header('Accept' => 'text/html');

$res = $ua->request($req);

if ($res->is_success) {
    # Using double method invocation, prob. want to do testing of
    # whether res is defined.
    # This is inline version of
    # my $finalrequest = $res->request(); 
    # print "Final URL = " . $finalrequest->url() . "\n";
    print "Final URI = " . $res->request()->uri() . "\n";
} else {
    print "Error: " . $res->status_line . "\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用 Perl 和 LWP 获取页面的情况下获得最终 URL? 的相关文章

随机推荐

  • 如何在 Couchbase 中捕获保存或更新事件

    我希望能够在 Couchbase 中更新或创建文档时进行一些数据操作 文档可以通过 Sync Gateway 或我们自己的代码 从 http 服务流式传输数据 到达我们的数据库 如果有一个地方可以拦截所有更新 那就太好了 我们正在针对这些数
  • Coq:定义子类型

    我有一个类型 比如说 Inductive Tt a b c 定义它的子类型的最简单和 或最好的方法是什么 假设我希望子类型仅包含构造函数a and b 一种方法是对二元素类型进行参数化 例如布尔 Definition filt x bool
  • apk 在 docker 构建上返回 DNS 查找错误

    当运行任何apk add 命令同时docker build I get DNS lookup error fetch http dl cdn alpinelinux org alpine v3 8 main x86 64 APKINDEX
  • 如何让 Docker Gitlab CI 运行程序访问其父主机上的 Git?

    Gitlab 设置在我们的内部网络上http gitlab http gitlab 同一台机器上的 Docker 容器无法连接到它 如何配置 docker 以使其知道 gitlab 是其父级 当 Gitlab CI 尝试运行构建 在 Doc
  • 使用 ssl 的 boost asio 的详细程度

    有没有办法使用 boost asio 让 ssl 握手对我更明显 我收到错误 asio ssl 错误 我只是想要更多的冗长 因为这条消息对我来说几乎没有任何意义 我发现boost asio与ssl使用openssl 我只需要使用调试标志重新
  • 旋转绘图点以相对于另一组点重新投影

    我有一个点数据框 绘制两个多边形的轮廓 一个与另一个多边形成直角 如下所示 以下是绘制该图的数据 outlines lt structure list sample ids structure c 1L 1L 1L 1L 1L 1L 1L
  • 如何将 JS Console 注入到任何页面? jsconsole.com

    出于教育目的 我想remotely调试在我的移动设备上运行的应用程序 我无权访问源代码 只要我了解这是可能的http jsconsole com http jsconsole com直接喷射 http jsconsole com injec
  • Scenekit 中相机不跟随飞机

    我有一架正在飞行的飞机 我正在跟踪它 并且我还显示了飞机所遵循的路径 我正在绘制圆柱体作为绘制路径的线 类似于在两点之间画一条线 我有一个cameraNode 最初设置为 0 200 200 那时我可以看到飞机 但当我开始飞行时 它走出了屏
  • 循环向量化给出了不同的答案

    我正在构建一些单元测试 发现我的代码给出了slightly矢量化时会产生不同的结果 在下面的示例中 一个数组a一维求和并添加到初始值x 大多数元素a太小而无法改变x 代码是 module datamod use ISO FORTRAN EN
  • Int 列表与 Int -> Int 列表相比,类型相同吗?

    为什么这两个有相同的类型 ghci gt k Int Int ghci gt k Int gt Int Int gt Int EDIT per 加布里埃尔 冈萨雷斯 https stackoverflow com users 1026598
  • 如何向 Laravel 工厂传递参数?

    我有一个users表和一对零 一的关系businesses表 users user id gt businesss user id 在我的users表我有一个鉴别器 它告诉我用户是否属于商务类型 因此我需要了解有关的详细信息business
  • iOS Apple TestFlight 版本需要什么样的证书和配置文件?

    我计划通过新的 Apple TestFlight 应用程序在 iOS 8 设备上发布 iPhone 应用程序的测试版 为此需要什么样的证书和配置文件 我需要一个生产证书和分配配置文件 可用的是这些 Certificate Pending D
  • 如何获得 sed 中的第 10 个分组值?

    这是我的 sed sed s a z A Z 0 9 a z A Z 0 9 a z A Z 0 9 a z 10 g 我试图获得第 10 个分组值 但是 它给出的第一个分组值是 0 零 如何获得第10个分组值 能否得到第10个分组值 se
  • JSON 包含条件

    我的设置 Rails 2 3 10 Ruby 1 8 7 假设我有这个代码片段 user User find 1 user to json include gt posts 如果我想包含具有特定条件的用户帖子 例如仅一周前的帖子 怎么办 定
  • 如何跟踪 php 函数/代码的处理持续时间

    我正在开发一个基于浏览器的游戏 我想知道哪些功能需要最多时间来处理等等 你们有人知道我可以从什么开始吗 使用 PHP 5 3 听起来像你想要的xhprof http pecl php net package xhprof 它擅长分析
  • Objectdatasource 和 Gridview:排序、分页、过滤

    我使用实体框架 1 0 并尝试使用可以访问我的外观的对象数据源提供 Gridview 问题是 这似乎特别困难 而且在互联网上还没有看到任何真正能做到我想要它做的事情 对于那些知道的人来说 使用对象数据源提供的网格视图无法自动排序 因此您必须
  • 无法加载资源:服务器响应状态为 403 - Image

    我发现角度和加载图像时遇到一些问题 我从 API 检索图像的链接 并将恢复的链接分配给图像的来源 但是 某些图像无法加载 并且我在 Chrome 控制台中收到以下错误 Failed to load resource the server r
  • UL 列出带有样式十进制数字的项目[重复]

    这个问题在这里已经有答案了 我需要创建一组列表项 其中需要使用边框半径和背景颜色设置列表项编号 小数 的样式 这是我希望列表项的外观的快照 我尝试在 li 上放置边框半径和背景 但我无法获得我正在寻找的输出 这里有一个工作链接 http j
  • 如何迭代 S3 存储桶中的文件?

    我有大量文件 gt 1 000 存储在 S3 存储桶中 我想迭代它们 例如 在for循环 使用以下方法从中提取数据boto3 然而 我注意到 根据http boto3 readthedocs io en latest reference s
  • 如何在不使用 Perl 和 LWP 获取页面的情况下获得最终 URL?

    我正在做一些网页抓取 http en wikipedia org wiki Web scraping使用 Perl 的 LWP 我需要处理一组 URL 其中一些可能会重定向 一次或多次 如何使用 HEAD 方法获得解决所有重定向的最终 UR