- 締切済み
HTTP::RequestでのWEBページの取得に失敗します。
Perlで以下のような処理を行おうとしています。 WEBページ1をダウンロードしてファイルに保存 (http://xxx.xx.xx/xxx?aaa=bbb) ↓ 保存したWEBページ1からFORMのパラメータを取り出して (<input type="hidden" name="xxx" value="ooo">) ↓ WEBページ2をダウンロードしてファイルに保存 (http://xxx.xx.xx/xxx?xxx=ooo) 実行して保存されたファイルを見ると、 WEBページ2がWEBページ1と同じものになってしまいます。 (WEBページ2とWEBページ1は同じサーバです。) 詳しくは以下の通りです。 原因が分かる方いましたら、アドバイスお願いします。 WEBページ1のvalue="ooo"の値が毎回変わるので とりあえず一度ファイルに保存 →そのファイルを開いて該当する値を探す としています。 仕事で閲覧するページなので、具体的なアドレスが書けません。 わかりにくくなってしまって申し訳ありません。 コードは補足に書きます。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
>WEBページ1のvalue="ooo"の値が毎回変わるので こういうしゃらくさいことをしているページであれば、リファラー、クッキー、ユーザーエージェントあたりもチェックしているのではないでそうか。
- tochanx
- ベストアンサー率37% (12/32)
では、とりあえずコードをお願いします。
補足
大変失礼しました。 補足で書こうと思ったのですが、 自分では書き込めないのですね…。 遅れましたが、コードは以下のようなものです use LWP::UserAgent; $id="xxx"; $pass="xxx"; #WEBページ1をダウンロードして"page1.html"の名前で保存する if(&download("http://xxx.xx.xx/xxx?aaa=bbb", "page1.html") == 0){ print "WEBページ1のダウンロードに失敗しました。<br>\n"; exit; } print "WEBページ1をダウンロードしました。<br>\n"; #WEBページ1から値を取り出す #ここは正しく処理されています。 #$valueにその値が入っています。 #WEBページ2をダウンロードして"page2.html"の名前で保存する if(&download("http://xxx.xx.xx/xxx?xxx=$value", "page2.html") == 0){ print "WEBページ2のダウンロードに失敗しました。<br>\n"; exit; } print "WEBページ2をダウンロードしました。<br>\n"; # WEBページをダウンロードしてファイルに保存するサブルーチン # # 引数1 ダウンロードするアドレス(ファイル名) # 引数2 保存するファイル名 # # 保存できたら1,できなかったら0を返す # sub download{ $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(GET => "$_[0]"); $req->authorization_basic("$id", "$pass"); #↑認証が必要なので $res = $ua->request($req, "$_[1]"); if ($res->is_success) { return 1; } else { return 0; } }
補足
そのサイトは商品検索のページなのですが、 (WEBページ1で検索結果の一覧を表示して WEBページ2でその商品の詳しい情報の一覧を 表示する、といったものです。) 実際のパラメータの部分は 10項目くらいあって、 そのうち2項目の値が変わるんです。 その2つは ...data_count=xxxxx&data_file=xxxxx... となっています。 ここからは推測ですが、 WEBページ1を要求したときに データベースからの検索結果を サーバー上にファイルに保存して、 WEBページ2を要求したときは その保存したファイルから読み込む、 と思ったのですが…。 (data_file=xxxxxとあるので。 ちなみにdata_count=xxxxxは検索結果の件数です。)