ページをダウンロードするのに Wget を使おうとしていますが、ログイン画面を通り過ぎることができません。
ログインページの投稿データを使用してユーザー名/パスワードを送信してから、実際のページを認証済みユーザーとしてダウンロードする方法を教えてください。
マニュアルページに基づく:
# Log in to the server. This only needs to be done once.
wget --save-cookies cookies.txt \
--keep-session-cookies \
--post-data 'user=foo&password=bar' \
--delete-after \
http://server.com/auth.php
# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
http://server.com/interesting/article.php
--post-data
パラメータが正しく パーセントエンコード (特にアンパサンド!)であることを確認してください。そうしないと、要求はおそらく失敗します。 user
とpassword
が正しいキーであることも確認してください。ログインページのHTMLを回転させることで正しいキーを見つけることができます(ブラウザの「inspect element」機能を調べて、usernameフィールドとpasswordフィールドのname
属性を見つけてください)。
私は--no-cookiesとCookie HTTPリクエストヘッダを使ってwgetに既存のコネクションのクッキーを直接渡しました。私の場合、ログインがより複雑に見える(ログインチケットで複数のリクエストを使用する)Moodle大学のログインでした。 POSTリクエストだったので--post-dataを追加しました。例えば、すべてのMoodleユーザリストを取得します。
wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php
一度使用する必要がある場合は、ブラウザを介してログインし、後で必要なヘッダをコピーすることができます。
Developer ToolsのNetworkタブで「Copy as cURL」を使用し(開いた後にページをリロードし)、curlのヘッダフラグ-H
と--data
をwgetの--header
と--post-data
に置き換えます。
私は同じ問題を抱えていました。私の解決策は、Chrome経由でログインし、クッキーデータをテキストファイルに保存することでした。これは、このChrome拡張機能で簡単に実行できます。 Chrome cookie.txtエクスポート拡張子 。
Cookieデータを取得したときに、それらをwgetで使用する方法の例もあります。簡単なコピー&ペーストのコマンドラインが用意されています。
あなたはPOSTされたフォームデータをするためにcURLを必要としません。 --post-data 'key1=value1&key2=value2'
は問題なく動作します。注:ファイル内のPOSTデータを使用してwgetにファイル名を渡すこともできます。
私はファイルをダウンロードしないワンライナーを望んでいました。これはクッキーの出力を次のリクエストにパイプする例です。私はGentooで以下をテストしただけですが、ほとんどの* nix環境で動作するはずです。
wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page'
(これは1行ですが、お使いのブラウザで折り返される可能性があります)
出力をファイルに保存したい場合は、-O -
を-O /some/file/name
に変更します。
基本認証を使用している場合
wget http://username:[email protected]/page.html
POSTされたフォームデータを使用している場合は、代わりに cURL のようなものを使用する必要があります。
注意:Lynxはこれが機能するために - enable-persistent-cookies フラグ付きでコンパイルされていなければなりません
あなたがログインを必要とするサイトからいくつかのファイルをダウンロードするためにwgetを使用したい場合は、単にクッキーファイルが必要です。クッキーファイルを生成するために、私はlynxを選びます。 lynxはテキストWebブラウザです。まず、クッキーを保存するためにlynx用の設定ファイルが必要です。ファイルlynx.cfgを作成します。これらの設定をファイルに書き込みます。
SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file
それから次のコマンドでlynxを起動します。
lynx -cfg=lynx.cfg http://the.site.com/login
あなたがユーザー名とパスワードを入力した後、そして「このパソコンに保存」かそれに類似したものを選択してください。ログインに成功すると、サイトの美しいテキストWebページが表示されます。そしてあなたはログアウトします。現在のディレクトリに、cookie.fileという名前のcookieファイルがあります。これがwgetに必要なものです。
それからwgetはこのコマンドでサイトからファイルをダウンロードすることができます。
wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz