web-dev-qa-db-ja.com

Wgetでログインページを通過する方法は?

ページをダウンロードするのに 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パラメータが正しく パーセントエンコード (特にアンパサンド!)であることを確認してください。そうしないと、要求はおそらく失敗します。 userpasswordが正しいキーであることも確認してください。ログインページのHTMLを回転させることで正しいキーを見つけることができます(ブラウザの「inspect element」機能を調べて、usernameフィールドとpasswordフィールドのname属性を見つけてください)。

313
jarnoan

私は--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

50
baptx

一度使用する必要がある場合は、ブラウザを介してログインし、後で必要なヘッダをコピーすることができます。

screenshot Developer ToolsのNetworkタブで「Copy as cURL」を使用し(開いた後にページをリロードし)、curlのヘッダフラグ-H--dataをwgetの--header--post-dataに置き換えます。

37
user

私は同じ問題を抱えていました。私の解決策は、Chrome経由でログインし、クッキーデータをテキストファイルに保存することでした。これは、このChrome拡張機能で簡単に実行できます。 Chrome cookie.txtエクスポート拡張子

Cookieデータを取得したときに、それらをwgetで使用する方法の例もあります。簡単なコピー&ペーストのコマンドラインが用意されています。

25

あなたはPOSTされたフォームデータをするためにcURLを必要としません。 --post-data 'key1=value1&key2=value2'は問題なく動作します。注:ファイル内のPOSTデータを使用してwgetにファイル名を渡すこともできます。

9
J. Piel

私はファイルをダウンロードしないワンライナーを望んでいました。これはクッキーの出力を次のリクエストにパイプする例です。私は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に変更します。

9
Caleb Gray

基本認証を使用している場合

wget http://username:[email protected]/page.html

POSTされたフォームデータを使用している場合は、代わりに cURL のようなものを使用する必要があります。

8
ceejayoz

Lynxとwgetを使う解決法。

注意: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
4
PokerFace

ブラウザで取得できる大きなファイルリンクをサーバー上でwgetを使用してダウンロードする例。

Google Chromeを使用した例です。

必要な場所にログインし、ダウンロードを押します。ダウンロードしてリンクをコピーしてください。

enter image description here

次に、ログイン先のページでDevToolsを開き、コンソールに移動してdocument.cookieと入力してCookieを取得します。

enter image description here

それでは、サーバーに行ってファイルをダウンロードしてください。wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

enter image description here

1
Alex Ivasyuv