1. ホーム
  2. linux

[解決済み] cURL - ウェブサイトのソースをスキャンする

2022-03-06 08:35:12

質問

BASHの中のcURLというプログラムを使って、ウェブページのソースコードをダウンロードしようとしていました。ページが単純なHTMLよりも複雑なエンコーディングを使用している場合、ページのコードをダウンロードしようとすると、問題が発生するのです。 例えば、私は次のページのソースコードを次のコマンドで表示しようとしています。

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones"

しかし、この結果は、"View source"をクリックしたときにFirefoxが生成したソースコードと一致しないのです。ページ内にJavascriptの要素があるためだと思うのですが、確証はありません。

例えば、私はできません。

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" | grep "Access to 4G speeds"

そのフレーズは明らかにFirefoxのソースにあるにもかかわらず。 マニュアルページにも目を通してみましたが、可能な解決策を見出すには、この問題について十分な知識がないのです。

望ましい回答は、なぜこれが私が期待するように動作しないのか、そしてLinuxボックスから実行可能なcurlまたは他のツールを使用して問題を解決する方法を含むことです。

EDIT

以下の提案を受けて、useragent switchも入れてみましたが、うまくいきません。

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3" | grep -i "Sorry"

解決方法は?

そのページにアクセスしても、そもそも"Access to 4G speed"が表示されないのですが。

この違いの原因として考えられるのは、Cookieとユーザーエージェントの2つです。

クッキーの指定は curl または wget . 好きなプラグインを使ってFirefoxからCookieを捨てるか、あるいは単に

javascript:prompt('',document.cookie);

をロケーションバーに入力してください。 そして、wgetやcurlのマニュアルを読み、そのクッキーをどのように含めるかを確認します。


EDIT : どうやら思った通り、Cookieの欠落のようです。

curl --cookie "INSERT THE COOKIE YOU GOT HERE" http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones | grep "Access to 4G"

上記のように、Cookieが何であれ、上から取得することができます。 javascript:prompt('',document.cookie) をクリックし、出てきたデフォルトのテキストをコピーしてください。ロケーションバーに貼り付けるときは、スプリントのページであることを確認してください(そうしないと、間違ったウェブサイトのクッキーを使ってしまうことになります)。


EDIT 2

ブラウザのクッキーとシェルのクッキーが異なるのは、行われたインタラクションが異なるからです。

そもそも、あなたが言っていたAccess to 4G speedの件が表示されなかったのは、郵便番号を入力していなかったからです。

常に関連性のあるクッキーを持ちたい場合は、そのクッキーを取得するために必要なこと、この場合は郵便番号の入力をcurlに強制させることができます。

curlでは、複数のリクエストを行い、取得したクッキーをクッキージャーに保持することでこれを実現することができます。

 [stackoverflow]  curl --help | grep cookie
 -b/--cookie <name=string/file> Cookie string or file to read cookies from (H)
 -c/--cookie-jar <file> Write cookies to this file after operation (H)
 -j/--junk-session-cookies Ignore session cookies read from file (H)

ですから、単純にクッキージャーを指定して、郵便番号の送信リクエストを送れば、あとは作業するだけです。