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を調べることで、正しいキーを見つけることができます(ブラウザの「要素の検査」機能を調べてname
、ユーザー名とパスワードのフィールドで属性を見つけます)。
ブラウザ経由でログインし、後で必要なヘッダーをコピーできます。
ブラウザ開発ツールの[ネットワーク]タブで[cURLとしてコピー]を使用し、curlのフラグ-H
をwgetのフラグに置き換えます--header
(必要--data
に--post-data
応じて)。
wget
withへの既存の接続--no-cookies
のCookieとCookieHTTPリクエストヘッダーを直接指定しました。私の場合、それはログインがより複雑に見えるMoodle大学のログインでした(ログインチケットで複数のリクエストを使用)。リクエスト--post-data
だったので追加しました。POST
たとえば、すべての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
私も同じ問題を抱えていました。私の解決策は、Chrome経由でログインし、Cookieデータをテキストファイルに保存することでした。これは、次のChrome拡張機能で簡単に実行できます:Chromecookie.txtエクスポート拡張機能。
Cookieデータを取得すると、wgetでCookieを使用する方法の例もあります。簡単なコピーアンドペーストコマンドラインが提供されています。
ファイルをダウンロードしないワンライナーが欲しかった。これは、Cookieの出力を次のリクエストにパイプする例です。私は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.ext
POSTされたフォームデータを実行するためにcURLは必要ありません。--post-data 'key1=value1&key2=value2'
うまく動作します。注:ファイル名を渡して、ファイル内のPOSTデータを使用してwgetすることもできます。
基本認証を使用している場合:
wget http://username:password@www.domain.com/page.html
POSTされたフォームデータを使用している場合は、代わりにcURLなどを使用する必要があります。
注:これを機能させるには、Lynxを--enable-persistent-cookiesフラグを使用してコンパイルする必要があります
ログインが必要なサイトからwgetを使用してファイルをダウンロードする場合は、Cookieファイルが必要です。クッキーファイルを生成するために、私はlynxを選択します。lynxはテキストウェブブラウザです。まず、Cookieを保存するための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
ユーザー名とパスワードを入力し、[このPCで保存する]などを選択します。ログインに成功すると、サイトの美しいテキストWebページが表示されます。そして、あなたはログアウトします。現在のディレクトリには、cookie.fileという名前のCookieファイルがあります。これがwgetに必要なものです。
次に、wgetはこのコマンドを使用してサイトからファイルをダウンロードできます。
wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
サーバー上のwgetを使用して、ブラウザーで取得できる大きなファイルリンクをダウンロードする例。
たとえば、GoogleChromeを使用しています。
必要な場所にログインし、ダウンロードを押します。リンクをダウンロードしてコピーします。
次に、ログインするページでDevToolsを開き、コンソールに移動して、次のように入力してCookieを取得します。document.cookie
次に、サーバーに移動してファイルをダウンロードします。wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>
このプラグインはFirefoxにインストールできます:https ://addons.mozilla.org/en-US/firefox/addon/cliget/?src = cb-dl-toprated必要なもののダウンロードを開始し、プラグインをクリックします。これは、wgetまたはcurlのいずれかがsererにファイルをダウンロードするためのコマンド全体を提供します。非常に簡単!
私はこのクローム拡張機能を使用しています。開いたダウンロードリンクのwgetコマンドが表示されます。