gpt4 book ai didi

perl - WWW::Mechanize 忽略 SSL

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:16 25 4
gpt4 key购买 nike

我正在使用以下代码和以下代码段:

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

仍然抛出以下错误:

获取 https://www.1031exchangeinc.com/ 时出错: 无法连接到 crawl.pl 第 29 行的 www.1031exchangeinc.com:443(SSL 连接尝试失败错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败)。

我想忽略 SSL 握手。

#!/usr/bin/perl

use Modern::Perl;
use WWW::Mechanize;
use IO::Socket::SSL;

my $root = 'https://www.1031exchangeinc.com/';
my $domain = 'https://www.1031exchangeinc.com';
#my $mech = WWW::Mechanize->new;
my $mech = WWW::Mechanize->new( 'ssl_opts' => { 'verify_hostname' => 0 } );

sub visit {
my $url = shift;
my $indent = shift || 0;
my $visited = shift || {};
my $tab = ' ' x $indent;

# Already seen that.
return if $visited->{$url}++;

# Leaves domain.
if ($url !~ /^$domain/) {
say $tab, "-> $url";
return;
}

# Not seen yet.
say $tab, "- $url ";
$mech->get($url);
visit($_, $indent+2, $visited) for
map {$_->url_abs} $mech->links;
}

visit($root);

最佳答案

I want to ignore the SSL handshake.

HTTP 不能忽略 SSL 握手,因为它是 TLS 连接(因此也是 https)的组成部分。您最多可以尝试跳过您正在尝试的证书验证(坏主意)。但是,这不会使握手失败消失。

此类握手错误是由客户端和服务器之间不重叠的密码套件、不受支持的协议(protocol)版本或缺少但需要的 TLS 扩展等引起的。

目前还不清楚您的情况到底是什么问题。但考虑到服务器根据 the SSLLabs report 需要 SNI并且它需要现代密码(ECDHE 和/或 GCM 或 ChaCha20)我猜你使用的是太旧版本的 OpenSSL。这通常是 MacOS X 上的情况,它附带了一个非常旧的 OpenSSL 版本,即版本 0.9.8。

你可以查看你使用的版本

perl -MNet::SSLeay -e 'warn Net::SSLeay::SSLeay_version(0)'

如果报告类似 0.9.8 的内容,那么您已经找到失败的原因,您需要升级到更新版本的 OpenSSL 并针对此重新编译 Net::SSLeay。
如果您至少拥有 OpenSSL 1.0.1,那么这是一个不同的问题,您应该将 Net::SSLeay 和 IO::Socket::SSL 的版本添加到您的问题中,并在使用 perl 运行时添加输出 - MIO::Socket::SSL=debug4 your-program.pl

关于perl - WWW::Mechanize 忽略 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47183328/

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