gpt4 book ai didi

使用 WWW::Mechanize 连接到 https 站点的 Perl 脚本刚刚开始失败

转载 作者:行者123 更新时间:2023-12-01 22:28:57 25 4
gpt4 key购买 nike

我有一个 Perl 脚本,它使用 WWW::Mechanize 连接到一个站点https,而该脚本前几天刚刚停止工作。现状我收到的错误消息是 500 和“无法连接到jobs.illinois.edu:443”。我尝试连接的 URL 是 https://jobs.illinois.edu/ .我可以从我的浏览器 (Firefox) 连接。我的平台是 Linux——最新的 Arch Linux。我也可以连接(使用 WWW::Mechanize)到其他 https 站点。

我尝试使用 LWP::UserAgent,行为是一样的。

我正在使用 ssl_opts => { SSL_version => 'TLSv1' };我不记得为什么我补充说——可能有必要让它在某些时候工作点。

关于如何解决这个问题的任何想法,或者我如何获得更多信息问题是什么?我可以尝试其他 SSL 选项吗?

我感觉配置上有一些细微的变化导致此问题的网站——可能是某些 SSL 协议(protocol)版本改变或类似的东西。 (我不认为我更新了任何东西在我的机器上工作和停止工作之间。)

谢谢。

这是失败的示例代码:

#!/usr/bin/perl

use strict;
use warnings;

use constant AJB_URL => 'https://jobs.illinois.edu/academic-job-board';

use WWW::Mechanize;

my $mech = WWW::Mechanize->new( ssl_opts => { SSL_version => 'TLSv1' } );

$mech->get( AJB_URL );

它返回:

Error GETing https://jobs.illinois.edu/academic-job-board: Can't connect to jobs.illinois.edu:443 at ./test2.pl line 12.

最佳答案

... that script just stopped working the other day.

这在大多数情况下是由服务器端或客户端更改引起的。但我假设您没有在客户端进行任何更改。

使用 perl -MIO::Socket::SSL=debug4... 调用您的代码会得到:

DEBUG: ...SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

查看 SSLLabs report您会看到两条信任路径,其中一条需要额外下载。第一个信任路径的根 CA“USERTrust RSA 证书颁发机构”没有安装在我的系统(Ubuntu 14.04)上,我猜它也没有安装在你的系统上(不知道关于你的操作系统的信息,所以只是猜测)。这意味着将使用第二个信任链,相关的 Root-CA“AddTrust External CA Root”也安装在我的系统上。不幸的是,此信任链缺少中间证书(“额外下载”),因此验证失败。

要解决这个问题,找到缺失的根 CA,它应该与指纹 2b8f1b57330dbba2d07a6c51f70ee90ddab9ad8e 匹配并使用它:

$ENV{PERL_LWP_SSL_CA_FILE} = '2b8f1b57330dbba2d07a6c51f70ee90ddab9ad8e.pem';

查看证书,您会看到它是在 2015 年 5 月 22 日颁发的,即三天前。这就解释了为什么刚才会出现这个问题。

关于使用 WWW::Mechanize 连接到 https 站点的 Perl 脚本刚刚开始失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30431494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com