[Perl]API接続の基本を確認する[外部サーバ通信]
Web APIとはWebサイトの機能を外部から利用できるようにしたものです。提供された機能で外部の開発者が自発的に新しいサービスを展開するなどの相乗効果が期待されます。このページではPerlでAPI接続をする際の基本となる概念、コーディングのポイントを説明しています。
PerlでGET送信する方法
Perlでurlへアクセスするには、標準モジュールのLWP::Simpleを利用できます。useするだけでget()やhead()を使用できるようになります。urlコンテンツを取得するだけの必要最小限の機能のみとなります。
#!/usr/bin/perl
use strict;
use warnings;
# urlアクセス用モジュール
use LWP::Simple;
# urlを定数に
use constant URL => 'http://example.com/';
my $html = get(URL);
リクエストのヘッダーを設定してアクセスする場合は、標準モジュールのLWP::UserAgentが利用できます。レスポンスのヘッダー情報は連想配列(ハッシュ)になっているので、キーで取り出します。全キーのリストは、$res->headers->header_field_namesで確認できます。
#!/usr/bin/perl
use strict;
use warnings;
# urlアクセス用のエージェント
use LWP::UserAgent;
use constant URL => 'http://example.com/';
my $ua = LWP::UserAgent->new;
my $res = $ua->get(
URL,
'User-Agent'=>'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
);
# レスポンス内容
my $html = $res->content;
# レスポンスヘッダーのキー配列
foreach($res->headers->header_field_names){
# キーで取り出し
$res->headers->header($_);
}
GET送信したいパラメータからクエリを構築する場合は、urlエスケープしてURL化します。標準モジュールのURIを利用すれば、連想配列から簡単にクエリを作成できます。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
# URI構築用モジュール
use URI;
use constant URL => 'http://example.com/';
# GET送信用パラメータの設定
my $url = URI->new(URL);
$url->query_form(
'name'=>'名前'
);
my $ua = LWP::UserAgent->new;
my $res = $ua->get(
$url,
'User-Agent'=>'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
);
PerlでPOST送信する方法
LWP::UserAgentモジュールでは、POST送信することも出来ます。送信するデータは、第二引数に配列か連想配列のリファレンスで渡します。Perlでは、('1','2','3')や('key'=>'val')で定義すると普通の配列や連想配列に、['1','2','3']や{'key'=>'val'}で定義すると配列や連想配列のリファレンスになります。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use constant URL => 'http://example.com/';
my $ua = LWP::UserAgent->new;
my $res = $ua->post(
$url,
{
'name'=>'名前'
},
'User-Agent'=>'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
);
PerlでCOOKIE送信する方法
Webサイトでログインが必要な画面などでは、クッキーと呼ばれるブラウザの管理データを送受信する必要があります。一般的に必要となるクッキーデータは、ログイン時のレスポンスヘッダーにあります。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use constant URL => 'http://example.com/login';
my $ua = LWP::UserAgent->new;
my $res = $ua->post(
URL,
{
'id'=>'value',
'pass'=>'value'
},
'User-Agent'=>'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
);
# 発行されたクッキーを取得
my @cookie = $res->headers->header('Set-Cookie');
# リクエストにクッキーを設定
my $res = $ua->get(
URL,
'User-Agent'=>'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)',
'Cookie'=>join('; ',@cookie)
);
PerlでBASIC認証する方法
BASIC認証とは、Webサーバで行われるアクセス制限で、一般的に.htaccessと.htpasswdで設定を行います。LWP::UserAgentモジュールでBASIC認証を行なう場合は、credentialsメソッドで設定を行います。注意点として、サーバ側と同じAuthNameの設定が必要です。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
# BASIC認証のURL
use constant URL => '***';
# ホスト名
use constant BASIC_HOST => '***';
# ポート番号
use constant BASIC_PORT => '80';
# BASIC認証 AuthName
use constant BASIC_AUTH_NAME => '***';
# BASIC認証 ID
use constant BASIC_ID => '***';
# BASIC認証 パスワード
use constant BASIC_PW => '***';
my $ua = LWP::UserAgent->new;
# BASIC認証の設定
$ua->credentials(BASIC_HOST.':'.BASIC_PORT,BASIC_AUTH_NAME,BASIC_ID,BASIC_PW);
my $res = $ua->get(
URL,
'User-Agent'=>'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
);
またはヘッダーのAuthorizationに認証情報を設定する方法でもアクセス可能です。この場合はIDとパスワードのみで接続できます。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
# base64エンコード
use MIME::Base64 qw(encode_base64);
# BASIC認証のURL
use constant URL => '***';
# BASIC認証 ID
use constant BASIC_ID => '***';
# BASIC認証 パスワード
use constant BASIC_PW => '***';
my $ua = LWP::UserAgent->new;
my $res = $ua->get(
URL,
'Authorization'=>'Basic '.encode_base64(BASIC_ID.':'.BASIC_PW),
'User-Agent'=>'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
);