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


263

Wgetを使用しようとしていますしてページをダウンロードが、ログイン画面を通過できません。

ログインページの投稿データを使用してユーザー名/パスワードを送信し、認証済みユーザーとして実際のページをダウンロードするにはどうすればよいですか?


回答:


342

マニュアルページに基づく:

# 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、ユーザー名とパスワードのフィールドの属性を見つけてください)。


10
最初のコマンドに--keep-session-cookiesを追加しますか、それとも2番目ですか?
フェリペアルバレス

4
これには-p--page-requisites)は必要ありません。
ændrük

14
また、追加する価値がある--delete-afterあなたはログインから結果ページを保存して終了していないので、最初の検索に。
ジム・Hunziker

2
WGET64: missing URLwgetコマンド全体を1行に入れて `\`を削除してエラーが発生します
Mowgli

6
--keep-session-cookiesは、最初のコマンドでのみ必要です。Cookieをファイルに保存するときにセッションCookieを含めるように最初のコマンドに指示します。2番目のコマンドは、提供されたファイルからすべてのCookieを読み取るだけです。
ワディム2014年

63

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

スクリーンショット 使用開発ツールのネットワークタブで「のcURLとしてコピー」(開封後はページをリロード)とカールのヘッダフラグを交換-Hし、--datawgetの者と--headerして--post-data


1
素晴らしい解決策!
メンタイス

驚くばかり!wgetの代わりにcurlを使用するオプションも指摘しました。これは同じことを実行でき、パラメーターを変更する必要さえないためです。

非常にクリーンでシンプルなソリューション、+ 1!
Kresimir Pendic

これは私にとってwgetはうまくいきましたが、正しいcookieではうまくいきませんでした。Webサービスが複数の異なるGETヘッダーをチェックしているようです。「User-Agent」や「Cache-Control」のように重要ではないように見えます。
アーサー

私にとって@Arthurは、このソリューションが機能した唯一のものでした。できるだけ多くのヘッダーデータをURLから削除しようとしましたが、最終的にはCookieデータで終わりました。だから私wgetは間違った方法でデータを提供したと思います。
Florian Blume

62

--no-cookiesとCookie HTTPリクエストヘッダーを使用して、既存の接続のcookieを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


7
素晴らしいヒント。これは、自分のマシンからCookieにアクセスし、コマンドラインから別のヘッドレスマシンからそれを使用できる場合に便利です。:)
Tuxdude 2016

3
--header "Cookie:access_token = IKVYJ; XSRF-TOKEN = 5e10521d"
Phil C

29

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

cookieデータを取得すると、wgetでそれらを使用する方法の例もあります。簡単なコピーと貼り付けのコマンドラインが提供されます。


1
残念ながら、自動スクリプトには適用されません
Znik、2015

1
この質問では、自動スクリプトを指定していません。このソリューションにより、作業の99%を自動化できます。
シェパード、

1
残念ながら、Googleはこのトリックには賢すぎるに違いありません。まだログインページが表示されます。
Josiah Yoder

1
もちろん、Googleは秘密のreCAPTCHAを使用しています...多くの場所で見たように、この場合、標準のプログラマティックAPIを使用することが最も実用的なオプションです。
Josiah Yoder

10

ファイルをダウンロードしないワンライナーが欲しかった。次に、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


9

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


8

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

wget http://username:password@www.domain.com/page.html

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


私は、サーバー上の変更は何もへのアクセス権を持っていけない、それが読み取り専用です
セニョールReginoldフランシス・

7
そう?サーバー上で何かを変更する必要はありません。
ceejayoz 2008

5

lynxとwgetを使用するソリューション。

注:これを機能させるには、Lynxを--enable-persistent-cookiesフラグでコンパイルする必要があります。

ログインが必要なサイトからwgetを使用してファイルをダウンロードする場合は、Cookieファイルが必要です。cookieファイルを生成するために、lynxを選択します。lynxはテキストWebブラウザーです。まず、lynxがcookieを保存するための設定ファイルが必要です。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

2
ログインにJavaScriptが必要な場合はどうなりますか?lynxはJavaScriptをサポートしていないようです。
Tiberiu 2018

1

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

Google Chromeを使用した例。

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

次に、サーバーに移動してファイルをダウンロードします。 wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

ここに画像の説明を入力してください


この答えは、2ページのCookieがあるGoogleにはうまく対応していないようです。
Josiah Yoder

もちろん、Googleは秘密のreCAPTCHAを使用しています...多くの場所で見たように、この場合、標準のプログラマティックAPIを使用することが最も実用的なオプションです。
Josiah Yoder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.