【发布时间】:2014-11-04 10:13:09
【问题描述】:
解决了! 感谢我的每一个帮助:)
找到http://stackoverflow.com/questions/8026524/how-do-i-force-lwp-to-use-cryptssleay-for-https-requests
并解决了我的问题
use Net::SSL (); # From Crypt-SSLeay
BEGIN {
$Net::HTTPS::SSL_SOCKET_CLASS = "Net::SSL"; # Force use of Net::SSL
$ENV{HTTPS_PROXY} = 'http://10.0.3.1:3128';
}
我尝试了上千种不同的方式来连接到 URL
https://sis-t.redsys.es:25443/sis/entradaXMLEntidad/
我似乎无法得到 500 错误以外的其他信息。
我尝试的最新代码是
require LWP::UserAgent;
## Code added according to Sinan Ünür s comment
use Net::SSLeay;
$Net::SSLeay::trace = 2;
## End of code added
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0});
$ua->agent("Mozilla/8.0");
$ua->timeout(10);
my $url = 'https://sis-t.redsys.es:25443/sis/entradaXMLEntidad/'
my $req = HTTP::Request->new( GET => $url);
$req->header( 'Accept' => 'text/html' );
# send request
my $res = $ua->request($req);
# check the outcome
if ( $res->is_success ) {
print $res->decoded_content;
} else {
print "Error: " . $res->status_line . "\n";
}
我尝试了有没有尝试
$ua->proxy('https', 'http://myproxy');
我尝试了 POST 和 GET(因为最后,我将不得不使用 POST 访问那个 URL)。
当然,我确保我能够从常规浏览器获取此页面。我确保我的代码始终能够以
的形式连接到其他页面https + example.com:example-port + /path/to/another/page.
如果有人能帮我找出我做错了什么,我将不胜感激。
编辑 为 Sinan Ünür 的评论添加的代码产生了以下错误
DEBUG: .../IO/Socket/SSL.pm:449: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:451: socket connected
DEBUG: .../IO/Socket/SSL.pm:469: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:504: using SNI with hostname sis-t.redsys.es
DEBUG: .../IO/Socket/SSL.pm:527: set socket to non-blocking to enforce timeout=10
DEBUG: .../IO/Socket/SSL.pm:550: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:560: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:570: handshake failed because socket did not became ready
Error: 500 Can't connect to sis-t.redsys.es:25443
输出是相同的,结合了我为创建 ua 想到的不同组合(带有/out 验证/SSL_version/...
my $ua = LWP::UserAgent->new; #(ssl_opts => { verify_hostname => 1, SSL_version => 'TLSv1' });
因为这里也发现了这个:http://www.perlmonks.org/?node_id=1106004
编辑2: 代码
#!/usr/bin/perl -w
use strict;
use Net::SSLeay;
$Net::SSLeay::trace = 2;
require LWP::UserAgent;
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0, SSL_version => 'TLSv1:!TLSv11:!TLSv12:!SSLv2:!SSLv3'});
$ua->agent("Mozilla/8.0");
$ua->timeout(10);
my $req = HTTP::Request->new( GET => "https://sis-t.redsys.es:25443/sis/entradaXMLEntidad/");
$req->header( 'Accept' => 'text/html' );
# send request
my $res = $ua->request($req);
# check the outcome
if ( $res->is_success ) {
print $res->decoded_content;
} else {
print "Error: " . $res->status_line . "\n";
}
在一台机器上工作正常 perl 5.14.2 LWP:用户::代理 6.04 IO::Socket::SSL 1.76 Net::SSLeay 1.48
但不是我的 perl 5.14.2 LWP:用户::代理 6.06 IO::Socket::SSL 1.955 净::SSLeay 1.55 而且我似乎无法找到更多差异......
【问题讨论】:
-
再次检查网址?
https://sis-t.redsys.es:25443/si\n+s/entradaXMLEntidad/ -
URL 是sis-t.redsys.es:25443/sis/entradaXMLEntidad,如图所示。由于线路太长,我发布时看起来有点修改。我会尝试在主消息中修复它
-
他们可以通过用户代理阻止你
标签: perl lwp-useragent