ソースコードで学ぶWebプログラミング

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