PERLのログイン-サブルーチン部分の修正について。

下記、スクリプトを修正して頂けないでしょうか?
最後の、open(OP,">Lonined_${ItemId}.html");部分で「こんにちは、 ID名 さん」と太文字で表示された状態でOKです。ゲストでは不可です。
なお、WWW-Mechanizeなど外部のモジュールは使わないで下さい。
但し、ディレクトリにそのまま置い使える場合(Windows XP環境)は問題ありません。
宜しくお願い致します。
use LWP::UserAgent;
use HTTP::Cookies;
use URI::Escape;
use HTTP::Request;
use HTTP::Headers;
my $ua = LWP::UserAgent->new;
$ua->cookie_jar( HTTP::Cookies->new(file => "${input_file}\.cookies",autosave => 1,));
$ua->agent('Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
$ua->timeout(150);
$ua->post( "http://login.yahoo.co.jp/config/login?",
[
".tries" => "1"
,".src" => "ym"
,".last" => ""
,"promo" => ""
,".intl" => "jp"
,".bypass" => ""
,".partner" => ""
,".u" => ""
,".v" => "0"
,".fUpdate" => "Y"
,"hasMsgr" => "0"
,".chkP" => "Y"
,"login" => $loginid
,"passwd" => $password
,".persistent" => "y"
]
);


my $res = $ua->get( "http://page.auctions.yahoo.co.jp/jp/auction/".$ItemId);
my $content = uri_unescape($res->content);
my $source = $res->content;
open(OP,">Lonined_${ItemId}.html");
print OP $source;
close(OP);

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/06/16 10:46:52
  • 終了:2011/06/17 18:32:08

回答(1件)

id:niwa-mikiho No.1

niwa-mikiho回答回数508ベストアンサー獲得回数382011/06/16 19:48:34

一旦ログインページにアクセスして、.challenge を取得して送信してやらないと駄目です。

id:j4mika

質問通り、スクリプトを修正して頂けないでしょうか?

また、このコードを改変して、.challengeを取得してそのままログインしても無理でした。

ソースを見直したところ、javascriptもエミュレートしないと無理なようです。また、他にも何かあるようです。

2011/06/17 18:31:41
  • id:taknt
    どのように修正しろって言うんだ?
  • id:j4mika
    コメントありがとうございます!
    例えば、下記のプログラムを実行させた場合、
    0Lonined_.htmlには文字認証を行いますというページが保存されます。(今までは正常にログイン出来ていた。)
    当然、ログインせずに、Yahooのページを見るわけですから、
    Lonined_.htmlでは、
    こんにちは、 ゲスト さん (利用可能ポイント:ログインして確認)
    と表示されます。
    ここが、ログイン名などになっていれば、ログインの確認が出来きると思っています。

    なお、ブラウザでYahooトップページから普通にログインするとこの表示は行われません。
    ブラウザでログインをしたかの様にログインさせたいのですがうまくいきません。
    恐らく、リファラが必要なこと、ログイン画面のユニークなhidden値を取得する必要がある事など他にも何かるかもしれませんが、何かの情報が不足しているようで上手く動きません。
    どなたか、手直しか、実際にログイン出来るプログラムを教え頂ければと思い、投稿させていただきました。

    --test.pl----------------------------------------
    # この部分(★)はお使いのID・Passを指定して下さい。
    $loginid = "★";
    $password = "★";

    use LWP::UserAgent;
    use HTTP::Cookies;
    use URI::Escape;
    use HTTP::Request;
    use HTTP::Headers;
    my $ua = LWP::UserAgent->new;
    $ua->cookie_jar( HTTP::Cookies->new(file => "${input_file}\.cookies",autosave => 1,));
    $ua->agent('Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
    $ua->timeout(150);

    my $res = $ua->post( "http://login.yahoo.co.jp/config/login?",
    [
    ".tries" => "1"
    ,".src" => "ym"
    ,".last" => ""
    ,"promo" => ""
    ,".intl" => "jp"
    ,".bypass" => ""
    ,".partner" => ""
    ,".u" => ""
    ,".v" => "0"
    ,".fUpdate" => "Y"
    ,"hasMsgr" => "0"
    ,".chkP" => "Y"
    ,"login" => $loginid
    ,"passwd" => $password
    ,".persistent" => "y"
    ]
    );

    my $content = uri_unescape($res->content);
    my $source = $res->content;
    open(OP,">0Lonined_${ItemId}.html");
    print OP $source;
    close(OP);


    my $res = $ua->get( "http://page.auctions.yahoo.co.jp/jp/auction/".$ItemId);
    my $content = uri_unescape($res->content);
    my $source = $res->content;
    open(OP,">Lonined_${ItemId}.html");
    print OP $source;
    close(OP);

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません