perl – 请帮我调试使用WWW :: Mechanize(或LWP :: UserAgent)的
我正在使用
WWW::Mechanize 将产品目录中的目录加载到我们的数据库中.我每天每2小时运行一次这个脚本,它通过使用大约50个同步线程在大约12分钟内完成.
一切都很顺利,直到这个周末.他们让他们的网站离线进行定期维护,一旦他们再次在线,我的脚本就不再有用了.在分析了一些事情后,它归结为以下代码失败: use strict; use warnings; use WWW::Mechanize; my $mec = WWW::Mechanize->new; $mec->get('https://www.imstores.com/Ingrammicromx/login/login.aspx'); print $mec->content; 代码消失(大约60秒后),并显示以下消息: Error GETing https://www.imstores.com/Ingrammicromx/login/login.aspx: Can't connect to www.imstores.com:443 at test.pl line 7. 现在,这些是让我很难找到问题的要点: >这与网络无关 – 如果我从任何浏览器访问相同的网址,我都会收到该页面. 我不知道还有什么可以尝试的.如果我切换到非SSL版本,它可以工作,但我不想这样做,因为我们自动化采购操作. 除了我想到的许多事情,想一想为什么它在远程机器上工作以及为什么我可以在我的浏览器中打开本地的页面: 是否可能被我的SSL公钥阻止?那可能吗?如果是这样,LWP / Mechanize用于SSL会话的公钥是什么?如何使用不同的公钥? 我当前设置的一些数据: >操作系统:Windows 7旗舰版x64 在此先感谢任何有用的评论. 解决方法
以下是问题的实际原因:您需要使用SSLv3或TLS1而不是TLS1.2来连接到该服务器.当你首先使用Net :: SSL时,这可能就是原因;我认为它以WWW:Mechanize没有的方式尝试不同的密码.
这就是我发现它的方式: 我尝试从几个不同的服务器连接,我发现那些工作的服务器有一个较旧的SSL版本.然后,我检查了版本中使用的密码之间的区别,并尝试连接不同的密码. 当我使用TLS1.2连接时,我得到: $openssl s_client -connect www.imstores.com:443 -tls1_2 CONNECTED(00000003) write:errno=54 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 322 bytes --- New,(NONE),Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE --- 但是当我连接SSLv3或TLS1时,我得到: $openssl s_client -connect www.imstores.com:443 -tls1 CONNECTED(00000003) depth=0 /serialNumber=O3gPUAuGGROuHEhlyLaeJfj7SOn6tFTx/C=US/O=www.imstores.com/OU=GT29846307/OU=See www.geotrust.com/resources/cps (c)11/OU=Domain Control Validated - QuickSSL(R) Premium/CN=www.imstores.com verify error:num=20:unable to get local issuer certificate [...and so on,including server certificate...] 究竟如何制作WWW:机械化使用TLS1或SSLv3留给学生练习. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |