用于登录 TopCoder 的 Perl 脚本

标签 perl ssl web https login-script

我的以下代码适用于其他 https 站点,但不适用于 TopCoder。输出文件如下: Can't connect to community.topcoder.com:443 LWP::Protocol::https::Socket: SSL connect attempts failed with Unknown error error:00000000:lib(0):func(0 ):reason(0) 位于 C:/Perl64/lib/LWP/Protocol/http.pm 第 51 行,第 2 行。 您能帮我知道哪里出了问题吗?非常感谢。

#!perl

use LWP::Simple;  
use LWP::UserAgent;   
use HTML::Form;   
use HTTP::Cookies; 
use Term::ReadKey;
use HTML::Parse; 

print "Please enter your TopCoder username:";
chop(my $user=<stdin>);
print "Please enter your TopCoder password: (do not display)\n";
ReadMode 2;
chop(my $password=<stdin>);
ReadMode 0;

#log-in and set cookies

my $host="http://community.topcoder.com/tc?&module=MyHome";   
my $method="GET";

my $cookie_jar=HTTP::Cookies->new;   
require HTTP::Request;   
my $ua=LWP::UserAgent->new;
$ua->cookie_jar({});
$ua->agent('Mozilla/5.0');   
my $r=HTTP::Request->new;   
my $response=HTTP::Response->new;   

$r->method($method);   
$r->uri($host);   
$cookie_jar->add_cookie_header($r);     
$response=$ua->request($r);      
$cookie_jar->extract_cookies($response);    

my $html;   
my $baseuri; 

if($response->is_success)   
{   
   $html=$response->content;
   $baseuri=$response->base;      
}   
else     
{   
  $html   =   $response->error_as_HTML();   
  print   "Server Connection Failed.\n";   
  exit 0;   
}   

my @forms=HTML::Form->parse($html,$baseuri);
my $form=$forms[1];  
$form->value("username",$user);   
$form->value("password",$password); 

push @{ $ua->requests_redirectable }, 'POST';    
$response=$ua->request($form->click);   

if ($response->content =~/Username or password incorrect/i) 
{
    print "Wrong username or password!\n";
    exit 1;
}    
else   
{ 
  open(FO2, ">login_test.htm");
  print FO2 $response->content;
  $cookie_jar->extract_cookies($response);  
  print   "Login OK\n";  
}   

$ua->cookie_jar($cookie_jar); 

最佳答案

IO::Socket::SSL uses SSLv2 by default ,并且该服务器不会重新协商以升级到 v3。因此,立即连接 v3,它就可以工作了。

LWP::UserAgent->new(ssl_opts => {SSL_version => 'SSLv3'})

关于用于登录 TopCoder 的 Perl 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618215/

相关文章:

perl - 使用 Text::CSV 在 perl 中解析 CSV 文件的问题

perl - 尝试使用 perl 登录网站时出现问题

Python SSL CERTIFICATE_VERIFY_FAILED

sqlite - 是否有任何选项可以为 Web 构建运行 SQLite Flutter?

javascript - 如果网站刷新,则停止 php 调用的 mysql 服务器运行

java - 如何在目录中列出服务器上的文件名?

perl - 在 Perl 中,我如何处理多行

perl - 优化 Perl 脚本 - 在 40GB 以上的文件上运行速度太慢

asp.net - Azure 调度程序作业 : SendFailure The underlying connection was closed

android - 来自谷歌播放的 SSL 警告