Perlについての質問箱 39箱目

このエントリーをはてなブックマークに追加
100デフォルトの名無しさん
ここ(http://kage.monazilla.org/system_DOLIB100.html)を参考に
●ログインするプログラムを書いてみました。
しかし、認証に失敗して、以下のセッションIDが返ってきます。
SESSION-ID=ERROR:ppppppppppp
何かアドバイスお願いします。

※IDとパスワードはここではダミーのものとしていますが
実際には自分自身のIDとパスワードを使用しています。

use strict;
use Socket;
use FileHandle;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

my $id='id';
my $pw='password';
my $ua = LWP::UserAgent->new;
$ua->agent('DOLIB/1.00');
$ua->default_header('X-2ch-UA' => 'Hoge/1.00');
my $url='https://2chv.tora3.net/futen.cgi';
my %form = ('ID'=>$id,'PW'=>$pw);
my $req = POST($url,[%form]);
101デフォルトの名無しさん:2009/02/22(日) 12:51:19
>>100
手元で検証してみたが、サーバ側のバグかもしれない
IDパラメータの「@」が「%40」にエンコードされていると認証に失敗した
102101:2009/02/22(日) 12:58:44
さっきのレスがわかりにくいかもしれないので…
futen.cgiに渡すパラメータは通常
[email protected]&PASS=password
って風になるんだけど、これが
ID=mail%40domain.jp&PASS=password
という風に渡すと、なぜか認証に失敗する。
本来は後者でも%40が@にデコードされた結果、認証が成功していないといけないのだが…

あ、>>100のコードでおかしいところ発見。
my $req = POST($url,[%form]);

my $req = POST($url,\%form);
103デフォルトの名無しさん:2009/02/22(日) 13:12:46
>>102
・エンコードしない。
・[%form]→\%formに修正。

再度実行してみましたけど、認証に失敗・・・orz
104101:2009/02/22(日) 13:20:31 BE:1092302674-2BP(1)
>>103
いや、プログラムが間違ってるわけじゃなくて、サーバ側の実装がおかしいんです。
で、一応の回避策ですが、
\%form

Content => "ID=$id&PW=$pw"
に修正すればうまくいくかと思います。

P.S.
サーバ側のバグについて
http://qb5.2ch.net/test/read.cgi/operate/1225876082/591
にて問い合わせています