• 締切済み

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
  • 回答数1
  • ありがとう数3

みんなの回答

回答No.1

以前、LWP::UserAgent と HTTP::Request::Common と使って、gmail にログ インしようとしましたが、上手くいかずあきらめました。そのときは、 Mechanize を使いました。Mechanize は UserAgent を継承しているので UserAgent の機能は全部使えると思います。 #!/usr/bin/perl use strict; use warnings; use WWW::Mechanize; my $mail = shift || die 'require mail account'; my $uri = shift || 'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fhl%3Dja%26ui%3Dhtml%26zy%3Dl&bsv=zpwhtygjntrz&scc=1<mpl=default<mplcache=2&hl=ja'; my $pass; { system "stty -echo"; print "Password: "; chop( $pass = <STDIN> ); print "\n"; system "stty echo"; } my $mech = WWW::Mechanize->new(); $mech->agent('Mozilla/5.0'); $mech->timeout(10); $mech->get($uri) or die "$uri:$!"; $mech->submit_form( form_number => 1, fields => { 'Email' => $mail, 'Passwd' => $pass } ) or die "$!"; print $mech->content();

関連する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 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
  • 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 ログオン後の別ページへのリクエスト

    ■現状 ・会社で利用しているサービスの請求情報を取得したく。  そのサービスが提供しているダウンロード機能は概要のデータのみの提供で情報が不足します。 ・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で言う、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; サポートされないブラウザーで弾かれます 解決策、教えてください

  • perlのLWPがページによって、正常に作動しません?

    下記コードを書いたのですが、ページのソースを取得することができません。 どのように変えれば、取得することができますでしょうか? 因みに、URL部分を、 http://www.amazon.co.jp/gp/product/B000H9I0F6 とした場合は正常に取得できました。 お分かりになる方、何卒、宜しくお願い致します。 #!/usr/bin/perl print "Content-Type: text/plain\n\n"; use LWP; use HTTP::Cookies; $url="http://www.amazon.co.jp/gp/product/B000GPEXX4"; $file="cookies.txt"; $browser = LWP::UserAgent->new; $browser->cookie_jar({file =>$file, autosave=>1 }); $response = $browser->get($url); print $response->{_content}; exit;

    • ベストアンサー
    • CGI
  • web文書を取得するプログラムのサイト内での不具合について

    perl初心者です。 自分のwebサイトのコードを取得するプログラムをつくろう と思っているのですが、下のコード -------------------------------------------------------- #!/usr/local/bin/perl use LWP::UserAgent; use HTTP::Request; use HTTP::Response; our $URL = 'http://www.google.co.jp/'; # アクセスする URL my $proxy = new LWP::UserAgent; my $req = HTTP::Request->new('POST' => $URL); # HTTP リクエストを作成 my $res = $proxy->request($req); # $res に HTTP レスポンスが返ってくる print $res->content; # HTML を表示 1; --------------------------------------------------------------- でターゲットのurlが上のgoogleだと取得できるんですが 自サイトのurl'http://○○.××.△△.com/'だと 500 Internal Server Errorとなってしまいます。 因みにレンタルサーバーを利用しています。 サーバーでは技術的な質問は受け付けてないとの事なので、 スクリプトの質問とは少しズレますが分る方がいましたら ご教えていただきたく質問いたしました。

  • クッキーを保持したままコード取得

    こんばんは。 Perlで例えば「https://secure.nicovideo.jp/secure/login?site=niconico」にアクセスして、そのログイン情報のまま「http://www.nicovideo.jp/」にアクセスしたソースコードが欲しいです。 下記ためしたコード use LWP::UserAgent; use HTTP::Request::Common qw(POST); $nico_ua = LWP::UserAgent->new; %loginform = ('mail' => 'hoge@hoge.jp', 'password' => '****'); $request = POST('https://secure.nicovideo.jp/secure/login?site=niconico', [%loginform]); $nico_ua->request($request); ##この時点でログインはできてる模様 $response = $nico_ua->get("http://www.nicovideo.jp/"); print $response->content; ##↑のprintが上手くいかない。 $nico_ua をそのまま使えばログイン情報も維持されると思ったが甘かったです。 LWPの接続でクッキーなどの情報を保持したまま次に指定したURLのコードを取得する方法が知りたいです。 お願いします。

    • ベストアンサー
    • 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

専門家に質問してみよう