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
パラメータが適切にパーセントエンコードされていることを確認してください(特にアンパサンド!)。そうしないと、リクエストが失敗する可能性があります。また、user
およびpassword
が正しいキーであることを確認してください。ログインページのHTMLを調べて正しいキーを見つけることができます(ブラウザーの「要素の検査」機能を調べてname
、ユーザー名とパスワードのフィールドの属性を見つけてください)。
-p
(--page-requisites
)は必要ありません。
--delete-after
あなたはログインから結果ページを保存して終了していないので、最初の検索に。
WGET64: missing URL
wgetコマンド全体を1行に入れて `\`を削除してエラーが発生します
一度だけ使用する必要がある場合は、ブラウザからログインし、後で必要なヘッダーをコピーできます。
使用開発ツールのネットワークタブで「のcURLとしてコピー」(開封後はページをリロード)とカールのヘッダフラグを交換-H
し、--data
wgetの者と--header
して--post-data
。
wget
はうまくいきましたが、正しいcookieではうまくいきませんでした。Webサービスが複数の異なるGETヘッダーをチェックしているようです。「User-Agent」や「Cache-Control」のように重要ではないように見えます。
wget
は間違った方法でデータを提供したと思います。
--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
私も同じ問題を抱えていました。私の解決策は、Chrome経由でログインし、Cookieデータをテキストファイルに保存することでした。これは、このChrome拡張機能(Chrome cookie.txtエクスポート拡張機能)で簡単に実行できます。
cookieデータを取得すると、wgetでそれらを使用する方法の例もあります。簡単なコピーと貼り付けのコマンドラインが提供されます。
ファイルをダウンロードしないワンライナーが欲しかった。次に、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
基本認証を使用している場合:
wget http://username:password@www.domain.com/page.html
POSTされたフォームデータを使用している場合は、代わりにcURLなどを使用する必要があります。
注:これを機能させるには、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
wgetでダウンロードする例サーバーを使用して、ブラウザーで取得できる大きなファイルリンク。
Google Chromeを使用した例。
必要な場所にログインし、ダウンロードを押します。リンクをダウンロードしてコピーします。
次に、ログインしたページでDevToolsを開き、コンソールに移動してCookieを取得します。document.cookie
次に、サーバーに移動してファイルをダウンロードします。 wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>