前提・実現したいこと
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
WWW::Mechanizeで、特定のサイト(ソース内$url[0] )が開けないのですが、何が問題かお判りになる方いらっしゃいますか。その他Googleなどのサイトは普通に開くことが出来ます。
IO::Socket::SSLのデバッグ情報は以下です。
DEBUG: .../IO/Socket/SSL.pm:3010: new ctx 34417455104
DEBUG: .../IO/Socket/SSL.pm:762: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:764: socket connected
DEBUG: .../IO/Socket/SSL.pm:787: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:829: using SNI with hostname salonboard.com
DEBUG: .../IO/Socket/SSL.pm:880: set socket to non-blocking to enforce timeout=10
DEBUG: .../IO/Socket/SSL.pm:894: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:897: done Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:907: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:917: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:937: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:894: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:897: done Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:907: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:917: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:937: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:894: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:897: done Net::SSLeay::connect -> 1
DEBUG: .../IO/Socket/SSL.pm:952: ssl handshake done
DEBUG: .../IO/Socket/SSL.pm:3059: free ctx 34417455104 open=
DEBUG: .../IO/Socket/SSL.pm:3070: OK free ctx 34417455104
Error GETing https://salonboard.com/: read timeout at Mech.cgi line 42.
DEBUG: .../IO/Socket/SSL.pm:952: ssl handshake doneのところで止まってしまい、最終的にDEBUG: .../IO/Socket/SSL.pm:3059: free ctx 34417455104 open=
DEBUG: .../IO/Socket/SSL.pm:3070: OK free ctx 34417455104
Error GETing https://salonboard.com/: read timeout at Mech.cgi line 42.の3行が一緒に表示されます。
該当のソースコード
Perl
1ソースコード 2use Jcode; 3use WWW::Mechanize; 4use LWP::UserAgent; 5use HTTP::Cookies; 6use IO::Socket::SSL qw(debug3); 7 8$url[0] = 'https://salonboard.com/'; 9 10my $cookie_jar = HTTP::Cookies->new(file => "cookie.txt", autosave => 1, ignore_discard => 1); 11$agent[0] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'; 12 13my $mech = WWW::Mechanize->new( 14ssl_opts => { 15 verify_hostname => 0, 16 SSL_cert_file => 'ca.cer', 17 }, 18 ); 19 20$mech->add_header(ACCEPT => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'); 21$mech->add_header(ACCEPT_LANGUAGE => 'ja,en-US;q=0.9,en;q=0.8'); 22$mech->add_header(ACCEPT_ENCODING => ' gzip, deflate'); 23$mech->add_header(CONNECTION => 'keep-alive'); 24$mech->add_header(HTTP_CACHE_CONTROL => 'max-age=0'); 25 26$cookie_jar->load($cookie_jar); 27$mech->cookie_jar($cookie_jar); 28$mech->agent($agent[0]); 29 30$response = $mech->get( $url[0] ); 31 32print "Content-type: text/html; charset=UTF-8\;\n\n"; 33print $mech->content; 34$mech->dump_headers(); 35
試したこと
ssl通信の問題かと思い、相手サイトから証明書をダウンロードして実行プログラムと同階層に保存し、読み込んだ結果通信は成立していることを確認。
HTTP::Cookiesにて相手サイトのcookie情報は記録されている模様。ここまでは通信されてその後遮断されているようです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー