WWW::Mechanize
製品プロバイダーからデータベースにカタログをロードするために使用しています。このスクリプトを毎日 2 時間ごとに実行すると、約 50 の同時スレッドを使用して約 12 分で完了します。
今週末まで、すべてが完璧に機能していました。彼らは定期的なメンテナンスのために Web サイトをオフラインにし、オンラインに戻ると、私のスクリプトは機能しなくなりました。物事を分析した後、次のコードが失敗することになります。
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.
さて、これらは私が問題を見つけるのを難しくしているポイントです:
これはネットワーク関連ではありません。どのブラウザからでも同じ URL にアクセスすると、そのページが表示されます。
Perl インストールの正確なコピーを含むリモート マシンで同じコードを試すと、動作します。
use Net::SSL
以前の場合WWW::Mechanize
、非常に長い時間がかかりますが、最終的にページを取得します。「 https://www.paypal.com 」などの他の SSL ページを試してみると、非常に高速に動作します。
繰り返しになりますが、定期メンテナンスの前に機能していました。
他に何を試すべきかわかりません。非SSL版に切り替えれば動くのですが、自動で購入しているのでやりたくないです。
なぜリモート マシンで動作するのか、なぜローカル マシンのブラウザーでページを開くことができるのかを考えながら、私の頭をよぎった多くの事柄に加えて、
SSL 公開鍵でブロックされる可能性はありますか? それは可能ですか?その場合、LWP/Mechanize が SSL セッションに使用している公開鍵は何ですか? また、別の公開鍵を使用するにはどうすればよいですか?
私の現在のセットアップに関するいくつかのデータ:
- OS: Windows 7 アルティメット x64
- Perl バージョン: 5.16.3 x64
LWP::UserAgent
バージョン: 6.05WWW::Mechanize
バージョン: 1.72IO::Socket
バージョン: 1.34IO::Socket::SSL
バージョン: 1.85Net::SSL
バージョン: 2.85Crypt::SSLeay
バージョン: 0.64
有益なコメントをお寄せいただきありがとうございます。