• 締切済み

Perl ログオン後の別ページへのリクエスト

■現状 ・会社で利用しているサービスの請求情報を取得したく。  そのサービスが提供しているダウンロード機能は概要のデータのみの提供で情報が不足します。 ・Webからは詳細な情報が取れますが、リンクを複数たどる必要あり、件数も多いので時間が足りません。 ・一度にデータを取得することができれば、と思い、LWPでできればと、試行錯誤中です。 ページの構成は次の通りです。 1.ログオンページ  ↓ユーザーID、パスワードでログオン   成功すると、リダイレクトでトップページが表示されます。 2.トップページ  ↓ボタンクリックでサービスメニューページに移動   Cookie がセットされます。 3.サービスメニューページ  ↓顧客コードを選択   ※顧客コードが複数あります。事前に把握可能です。 4.月選択画面  ↓月を選択すると、その月の請求概要データの一覧が表示されます。 5.請求概要データ一覧画面  ↓伝票番号を選択すると、請求詳細情報が表示されます。   ※件数が多い場合、複数ページに分かれます。   ※請求詳細キーをフォームのパラメータで渡します。 6.請求詳細データ画面 ■実現したいことは、 a.IDとパスワードを使ってログオン b.ログオン後、月選択画面に移動 c.請求概要データ一覧画面でキーを取得 d.キーをパラメータで渡して、請求詳細データ画面の情報を取得する a.は実現できました。 ■わからないこと ・b でログオン後に月選択画面に移動するためのリクエストを再度生成して処理する方法がわかりません。 ・c でキーを取得する方法  ※HTML::TreeBuilder でキーの一覧を解析する予定ですが、試せておらず。 ===== 以下、スクリプト ===== use LWP::UserAgent; use HTTP::Request; use HTTP::Request::Common qw(POST); use HTTP::Cookies; # cookie_jarの生成 my $cookie_jar = HTTP::Cookies->new(file => "cookie.txt", autosave => 1, ignore_discard => 1); # リクエストの生成 my $url = 'https://hogehoge/login'; my %formdata = ('ID' => 'ID', 'PW' => 'PW'); my $request = POST($url,[%formdata]); # UserAgentを生成して処理 my $ua = LWP::UserAgent->new; $ua->cookie_jar($cookie_jar); #my $res = $ua->request($request); my $res = &process_request($ua, $request); print $res->as_string; # 以下質問 ここから先、別のリクエスト(https://hogehoge/serviceへのリクエスト)を生成し、 UserAgentを生成して処理する方法がわかりません。 res を print するサンプルはいくつかあるのですが、別のリクエストをどうやって生成したらよいのか。 "if ($res->is_success) {処理} " とすればよいのでしょうか? # 質問終わり sub process_request { my ($ua, $request) = @_; my $res = $ua->request($request); while ($res->is_redirect) { my $url = $res->header('Location'); $res = $ua->request(HTTP::Request->new(GET => $url)); } return $res; } ==========

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

WWW::Mechanize がお勧め。

参考URL:
http://e8y.net/mag/007-www-mechanize/
atsutonx
質問者

お礼

t-okura さん ありがとうございます。 早速見てみます。

関連するQ&A

  • Perlのコードを隠蔽する

    Perlのソースコードを隠蔽する&ActivePerlなどがない環境でも動くようにperl2exeを使って変換して配布しようと思っています。 逆コンパイラされる可能性が0ではないことはわかっています。 しかし、下記コードの実行がなかなかうまくいきません。実際の.plでの起動時ではうまくいくのですが、.exeに変換するとうまくいかないようです。回避方法を教えてください。 -------------------- use HTTP::Request::Common qw(POST); use LWP::UserAgent; my $ua = LWP::UserAgent->new; my %loginform = ('mail' => 'hogehoge@hoge.jp', 'password' => 'hogehoge'); my $request = POST('https://****/login', [%loginform]); my $res = $ua->request($request); my $cookie = $res->header('Set-Cookie'); --------------------

  • LWPでヘッダー情報をあらかじめ取得したい

    例えば、下記のようなスクリプトの場合、一度画像が保存された後、ファイルサイズをを抜き出すようになります。 ダウンロード前に、ファイルサイズをあらかじめ知りたいのですがどのようにしたら良いでしょうか? use strict; my $url = "http://img.www.goo.ne.jp/img/gh_logo.png"; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request; use HTTP::Headers; my $req = HTTP::Request->new(GET => $url); my $ua = LWP::UserAgent->new; $ua->agent( 'Mozilla/5.0 (Windows NT 6.0; rv:12.0)' ); $ua->timeout('10'); $ua->max_redirect(); $ua->cookie_jar( HTTP::Cookies->new( file => '', autosave => 1, )); my $res = $ua->request($req, "save.png"); my $file_size = $res->header("content-length"); print $file_size;

    • ベストアンサー
    • Perl
  • perlでhtmlファイルを取得したいのですが

    perlでmixiなどログイン処理のあるサイトのhtmlファイルを取得したいのですがなかなか上手くいきません。 どなたかご教授をお願いします。 ----------------------------------------------------------------- #!/usr/bin/perl use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request::Common; use LWP::Simple; my $mixi_email = 'メールアドレス@yahoo.co.jp'; my $mixi_password = 'パスワード'; my $login_url = 'http://mixi.jp/login.pl'; my $home_url = 'http://mixi.jp/home.pl'; my $mixi = LWP::UserAgent->new($mixi_email, $mixi_password); #Cookieを有効にする# my $cookie = sprintf('cookie_%s_%s.txt', $$, time); my $cookie_jar = HTTP::Cookies->new(file => $cookie, ignore_discard => 1); $mixi->cookie_jar($cookie_jar); #ログインする# my @form = ('email' => $mixi_email, 'password' => $mixi_password, 'next_url' => $home_url);#POSTで送る内容の配列 my $request1 = &HTTP::Request::Common::POST($login_url, [@form]); #リクエストヘッダの生成 my $response1 = $mixi->request($request1); #ログインする getstore("http://mixi.jp/search_community.pl?from=global(取得先の指定)", "test.html"); ---------------------------------------------------------------------- 試しに書いてみたのですがうまくいきませんでした

  • Perlで言う、LWP HTTPをPHPで

    PerlでのスクリプトをPHPに移行しようかと考えております。(勉強のため) それで、PerlのモジュールでいうLWPとHTTPに代わるクラスライブラリ(API)は、どれにあたるのでしょうか? 具体的には、LWP::UserAgentとHTTP::Requestです。 ※詳しくは、 my $wa = new LWP::UserAgent; my $req = new HTTP::Request(GET => $url); my $res = $wa->request($req); PHPのドキュメント(http://www.php.net/manual/ja/)を見たのですが、いまいちピンときませんでした。 参考URLで結構ですので、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • LWPモジュールでログインしHTML取得

    use LWP::UserAgent; use HTTP::Request::Common qw(POST); my $url = 'https://toto.netbk.co.jp/main/smm0100'; my %formdata = ('userName' => 'ID', 'loginPwdSet' => 'Pass'); my $request = POST($url,[%formdata]); my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0'); $ua->ssl_opts(verify_hostname => 0); my $res = $ua->request($request); print $res->as_string; サポートされないブラウザーで弾かれます 解決策、教えてください

  • LWPで応答データを取得できない

    お世話になります。 perl5でLWPを使用しているのですが、一部のサイトでデータを取得できず困っております。 具体的には my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0'); my $req = HTTP::Request->new(GET => "http://misshiki.blog7.fc2.com/?xml"); my $res = $ua->request($req); my $buf = $res->content; といった感じでRSSを取得したいのですが、$bufが空になってしまいます。 しかし、 $res->as_string とすると、レスポンスヘッダも含めてRSSが取得できていることが確認できます。 また、上記以外のURLでは正常に$res->contentでデータを取得することができています。 どうもFC2ブログのRSSのみの事象のようではあるのですが、対処方法がわからず困っております。 対策をご教授いただければ幸いです。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 別サーバーへの書き込み

    別サーバーのファイルを以下のようにすると、読み込みは可能となりました。 このファイルに書き込むロジックを調べているのですが、 中々見つかりません。 どのようにすれば、書き込む事が出来るのでしょうか。 $url = "http://www.test.jp/test.dat"; require LWP::UserAgent; $ua = new LWP::UserAgent; $request = new HTTP::Request('GET', $url); $response = $ua->request($request); if ($response->is_success) { $content = $response->content; } @DATA = $content;

  • LWP Cookie取得

    恐れ入ります。 LWPで、特定サイトにアクセスした時に発行されるCookieを任意のディレクトリに保存したいのですが、どのようにしたらよいかわかりません。 use HTTP::Cookies; use LWP::UserAgent; $ua = LWP::UserAgent->new(); $cookie_file = './cookie/xxx.txt'; $cookie_jar = HTTP::Cookies->new(file => $cookie_file, autosave => 1); $url = "http://~~"; $response = $ua->get($url); print $response->content; で、コンテンツは表示されますが、xxx.txtにcookieが保存されません。 #LWP-Cookies-1.0 のみが記載された白紙のxxx.txtが精製されます。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perl LWPでproxyがうまく刺さらない

    Perl初心者です。 LWPでどうしてもproxyが通りません・・・。 何が悪いのかわかりません。教えてください。 モジュールは全て導入を確認しました。 よろしくお願いします。 稚拙なミスだったらごめんなさい。 use LWP::Simple; use LWP::UserAgent; use HTTP::Request::Common; my $ua = LWP::UserAgent->new( timeout=>"5" ); #cybersyndromeさんからLWP::Simpleでproxyを取得 $_ = get('http://www.cybersyndrome.net/pla5.html'); #proxyをリストに代入 (@proxy_list)=/\"\>(.*?)\<\/a\>\<\/li\>\<li\>/g; #適当なサイトをリクエストのターゲットに $r = new HTTP::Request GET,('http://taruo.net/e/'); #前述のターゲットへリクエストしてひとつづつproxyが通るか確かめたいのに何故かすべてすぐにERRORに for($i = 0;$i <= 10;$i++){ $proxy = 'http://'.$proxy_list[$i]; $ua->proxy ([qw(http https)] , $proxy); $req = $ua->request($r); if ($req->is_success) { print "Success!\n"; }else{ print "Error\n"; } }

    • ベストアンサー
    • Perl
  • LWPでHTTPSサイトからコンテンツ取得

    LWP::UserAgentを使用してHTTPSサイトから、 コンテンツを取得して解析処理をしたいのですが、 取得できなくて困っています。 Crypt::SSLeayやopensslを入れてアクセスは出来るようになったのですが、 HTTPサイトの場合 $ua = LWP::UserAgent->new; my $Req = HTTP::Request->new('GET', 'http://~'); my $Res = $ua->request($Req); my $content = $Res->content; これで、コンテンツのソースを取得できたのですが、 同じ用にhttpsサイトから取得しようしても 「<HTML></HTML>」だけしか取得できませんでした。 ちなみに my $content = $Res->as_string; としてみると、 HTTP/1.0 200 OK Content-Type: text/html Client-Date: Thu, 08 Dec 2005 08:01:10 GMT Client-Peer: *.*.*.*:8080 ←隠させてもらいます Client-Response-Num: 1 Refresh: 0; URL=https://~ という取得したいHTTPSサイトにジャンプするような 内容が取得できました。 どうにかしてコンテンツ内容を取得したいのですが、 そもそもHTTPSのコンテンツ内容を取得すること自体 出来ないのでしょうか? その場合代案等もありましたら、教えてください。 とても困っています。 よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう