活动perl Mechanize错误请求

活动perl Mechanize错误请求,perl,www-mechanize,Perl,Www Mechanize,我正在尝试使用Mechanize获取https,但由于以下原因失败: use strict; use warnings; use IO::Socket::SSL; use WWW::Mechanize; my $mech = WWW::Mechanize->new; $mech->proxy(['https','http'], 'http://proxy:8080/'); $mech->get('https://www.google.com'); print $mech-

我正在尝试使用Mechanize获取https,但由于以下原因失败:

use strict;
use warnings;

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

my $mech = WWW::Mechanize->new;
$mech->proxy(['https','http'], 'http://proxy:8080/');
$mech->get('https://www.google.com');

print $mech->content;
错误:

Error GETing https://www.google.com: Bad Request at perl4.pl line 9.
当我尝试使用
LWP::UserAgent
时,我能够获得https而没有任何错误:

use LWP::UserAgent;

my $ua  = LWP::UserAgent->new;
$ua->proxy(['https','http'], 'http://proxy:8080/');
$ua->get('https://www.google.com');
有人能帮忙吗


根据您提供的代理阻止某个用户代理的错误,我猜当前正在使用Mechanize 1.72。LWP::UserAgent使用的HTTP用户代理不同于WWW::Mechanize

我建议试着用这句话:

my $mech = WWW::Mechanize->new( agent => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36' );
这将使代理和接收服务器相信你是一个Chrome浏览器,而不是某种爬虫/恶意软件/病毒/等等

另一个建议是在$mech元素上执行数据转储程序,并确认“内部”是什么:

您还可以使用相同的方法在
get()
函数调用之后转储
$mech
的内容


不确定它是否相关,但请注意,并非所有代理都支持HTTPS/SSL,只有那些允许内联代理/连接代理的代理才允许您代理HTTPS/SSL流量。

WWWWWW::Mechanize基于LWP::UserAgent,多年来它对HTTPS代理请求有着奇怪的想法,例如,它不使用连接请求构建隧道,然后升级到SSL,而是使用https URL发送GET请求。 看


修复程序最终合并到libwwperlgithub存储库中,但我不知道LWP的新版本何时发布。同时,您可能会使用Net::SSLGlue::LWP,该软件会修补LWP,以提供对https代理的适当支持(我是Net::SSLGlue::LWP和LWP修复程序的作者)。

我已经安装了LWP-Protocol-connect-6.03 并使用连接到代理

$https_proxy = 'connect://proxy:8080/';

它现在运行良好:D

适合我(没有代理)。请负责代理的系统管理员协助您调试。我已尝试在用户代理的代码中使用相同的代理,我可以在没有任何错误请求的情况下获得https。所以我认为我的代码有问题,而不是代理。你能解释一下为什么代理只在一个库中工作而不在另一个库中工作吗?特别是在Mechanize是LWP::UserAgent的子类的情况下,我猜Mechanize中的get方法与UserAgent get方法相同。对不起,我的问题是noob。这是我第一次使用proxy和perl.Works(使用proxy)。其中一个原因可能是,如果用户代理标头与WWW-Mechanize匹配,则代理会拒绝请求。在perlmonks上模糊地记住了某些内容。这两种方法看起来都适用吗?我尝试过调试,得到了以下消息:在WWW::Mechanize::request调试日志中,它似乎得到的是http请求而不是https。
$https_proxy = 'connect://proxy:8080/';