[Perl] Windowsのプロキシ設定を取得

ネット上から様々な情報を取得するプログラムを作る場合はPerlを使ってプログラムを組むことが多いのですが、職場からの実行用にプロキシ設定をソース内に書いてしまうと自宅で同じファイルを動かそうとした際にその設定が邪魔になり修正が必要になるなど意外に面倒だったりします。

Windows機の場合、Internet Explorerなどに適用されるOSの「インターネット設定」の値を使用するようにしておくとそうした手間から開放されます。

use strict;
use warnings;

my $proxy = '';

if ($^O eq "MSWin32") {
    eval { require Win32::Registry; };
    if (!$@) {
        my $obj;
        our $HKEY_CURRENT_USER;
        if ($HKEY_CURRENT_USER->Open('Software\Microsoft\Windows\CurrentVersion\Internet Settings', $obj)) {
            my %values;
            $obj->GetValues(\%values);
            if ($values{ProxyEnable}[2]) {
                $proxy = $values{ProxyServer}[2];
            }
        }
    }
}

print "ProxyServer [$proxy]";
exit;

なお、LWP::UserAgentでプロキシを利用したいだけであれば上記のような方法でわざわざ値を取得しなくてもenv_proxyオプションを使えば一発です。

use strict;
use warnings;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new(
    env_proxy  => 1
);

my $response = $ua->get("http://xxxxxxxxxxx");

管理の手間は省けるにこしたことはありませんよね。

    この記事へのコメント

    メールアドレスが公開されることはありません。

    頂戴したコメントは管理者に承認されるまで表示されません。