Perl: 2015年5月アーカイブ

サーバ移行案件で、ある Perl プログラムを新サーバに移行した。

そのプログラムは、LWP::UserAgent モジュールを使って、外部の HTTPS サーバと通信をしている。
まあ、写真のデータを取ってくるだけなんですけど。

ところが、新しいサーバで HTTPS 接続しても空のデータしか取れない。

Crypt::SSLeay
IO::Socket::SSL

や、ついでに

Net::SSLeay

とかとか。SSL 通信を行なうためのモジュールは入っているのに・・・である。

試しに、

#!/usr/bin/perl
use HTTP::Status;
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("LWP::GETHEAD");
$url = $ARGV[0];
$request = new HTTP::Request HEAD => $url;
$response = $ua->request($request);
print "Content-Type:\t", $response->header("Content-Type"),"\n";
print "Content-Length:\t", $response->header("Content-Length"),"\n";
print "Last-Modified:\t", $response->header("Last-Modified"),"\n";
print "Expires:\t", $response->header("Expires"),"\n";
print "Server: \t", $response->header("Server"),"\n";

こういうスクリプトを作って走らせてみても、

# perl test.pl https://www.exsample.jp/
Content-Type:   text/plain
Content-Length:
Last-Modified:
Expires:
Server:

という寂しい結果が返ってくるだけ。

なんじゃ?と思ったのだが、そう言えば IO::Socket::SSL モジュールのバージョンが上がって、「ホスト同士で証明書交換せえよ。それが出来んのだったら『セキュリティ的には緩くなっちゃうのがわかってて、あえて証明書は用意してないんですよ』という意思表明のために、verify_hostname オプションを明示的に書けよ」ということになったのを思い出した。以前、このブログにも書いたことあるけどな。

というわけで、スクリプトに、

#!/usr/bin/perl
use HTTP::Status;
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("LWP::GETHEAD");
$ua->ssl_opts( verify_hostname => 0 );
$url = $ARGV[0];
$request = new HTTP::Request HEAD => $url;
$response = $ua->request($request);
print "Content-Type:\t", $response->header("Content-Type"),"\n";
print "Content-Length:\t", $response->header("Content-Length"),"\n";
print "Last-Modified:\t", $response->header("Last-Modified"),"\n";
print "Expires:\t", $response->header("Expires"),"\n";
print "Server: \t", $response->header("Server"),"\n";

という具合に一文入れてやるだけで、

# perl test.pl https://www.exsample.jp/
Content-Type:   text/html
Content-Length: 18469
Last-Modified:  Sun, 01 Mar 2015 00:04:16 GMT
Expires:
Server:         Apache

このように通信可能となる。

そう言えば、この当該プログラムを書いたの、6年も前だ(^^;

長く動いているプログラムは、移行の時に色々ある(^^;

このアーカイブについて

このページには、2015年5月以降に書かれたブログ記事のうちPerlカテゴリに属しているものが含まれています。

前のアーカイブはPerl: 2015年1月です。

次のアーカイブはPerl: 2016年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら