@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

perlからSSLでのform認証ページのコンテンツを取得したい

1
投稿者投稿内容
kei
ベテラン
会議室デビュー日: 2005/03/18
投稿数: 53
投稿日時: 2006-07-26 18:38
keiと申します。

以下のようなページに対して、ブラウザからID、PWを入力して得られるWEBページを、
perlスクリプトからリクエストを出して、ページデータを取得したいと思っているの
ですが、やり方が分からず困っています。
(ID,PW認証用cgiとの通信はSSLになります。)

LWPとかを使えば出来そうなことがNETには書かれていたりするのですが、
イマイチ方法が分かっていません。

どなたか、教えてもらえないでしょうか。

<html>
<head>
<title>検証用ページ</title>
<meta http-equiv="Content-Type" content="text/html";charset=EUC-JP">
</head>

<center>
<b><font size="4">ログイン認証(form認証)</font></b>
<p>
<table border="1" cellpadding="2" bgcolor="#dddddd">

<tr><td>
<form method="POST" action="https://hogehoge.jp/~test/cgi-bin/login.cgi" target="main">
<input type="hidden" name="type" value="login">
ID:<input type="text" size="20" maxlength="20" name="ID" value=""><br>
PW:<input type="password" size="20" maxlength="20" name="PW" value="">
<input type="submit" value="ログイン">
</td></form><td>form認証でのログインを行い、正しいID、PWであれば、認証成功ページを返します。
</td></tr>

</body>
</html>
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-07-26 18:58
何がわからないんでしょうか?

  • 件のページの認証フォームに相当するHTTPリクエストの作り方
  • HTTPのリクエストを出してレスポンスを貰う方法
  • PerlでのHTTPSの扱い方
  • などなど…

kei
ベテラン
会議室デビュー日: 2005/03/18
投稿数: 53
投稿日時: 2006-07-26 19:18
言葉足らずですいませんでした。

分からないのは、
「認証フォームに相当するHTTPリクエストの作り方」
になります。

スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-07-27 10:11
17.13 Form submission」を読んでください。とくに「17.13.4 Form content types」のあたり。
kei
ベテラン
会議室デビュー日: 2005/03/18
投稿数: 53
投稿日時: 2006-07-27 10:51
スフレ様
回答ありがとうございました。

LWPを使って、SSL通信でform認証を行わせて、ページのコンテンツを取得する
ことができました。

もう一つやりたいことがありまして、ヘッダーを追加したいのですが、
どのようにしたらいいんでしょう?

以下のようなヘッダーを送信データに追加したいです。
ヘッダー名:HOGE
値:HOGEHOGE

コード
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common qw(POST);

# リクエストの生成
my $url = 'https://hoge.jp/~test/cgi-bin/login.cgi';
my %formdata = ('type' => 'login','ID' => 'ID', 'PW' => 'PW');
my $request = POST($url,[%formdata]);

# UserAgentを生成して処理
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string;

スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-07-27 13:25
マニュアルを読みましょう。ちゃんとインストールされていれば、「perldoc HTTP::Request」で読めます。
kei
ベテラン
会議室デビュー日: 2005/03/18
投稿数: 53
投稿日時: 2006-07-27 13:50
スフレ様

回答ありがとうございます。

perldoc HTTP::Request
を読んで、解決することができました。

$request->init_header('HOGE' => 'HOGEHOGE');
この1行をmy $request = POST($url,[%formdata]);
の後に追加することにより、うまくヘッダーを追加することが
できました。

ありがとうございました。



コード
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common qw(POST);

# リクエストの生成
my $url = 'https://hoge.jp/~test/cgi-bin/login.cgi';
my %formdata = ('type' => 'login','ID' => 'ID', 'PW' => 'PW');
my $request = POST($url,[%formdata]);
$request->init_header('HOGE' => 'HOGEHOGE');

# UserAgentを生成して処理
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
print $res->as_string;

1

スキルアップ/キャリアアップ(JOB@IT)