[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");

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

    このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

    reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

    頂戴したコメントは管理者に承認されるまで表示されません。また、メールアドレスが公開されることはありません。
    このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。