wget
とcurl
を使用してファイルをダウンロードしようとすると、403エラーで拒否されます(禁止)。
同じマシンでWebブラウザーを使用してファイルを表示できます。
http://www.whatsmyuseragent.com で取得したブラウザのユーザーエージェントを使用して再試行します。私はこれをします:
wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
そして
curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
しかし、それはまだ禁止されています。 403には他にどのような理由があるのでしょうか。それらを克服するためにwget
およびcurl
コマンドをどのように変更できますか?
(これはファイルを取得できるということではありません-私はブラウザからファイルを保存できることを知っています。コマンドラインツールの動作が異なる理由を理解することです)
更新
この質問に与えられたすべての優れた回答に感謝します。私が遭遇した特定の問題は、サーバーがリファラーをチェックしていることでした。これをコマンドラインに追加すると、curl
とwget
を使用してファイルを取得できます。
リファラーをチェックしたサーバーは、302を経由してチェックをまったく実行しない別の場所にバウンスしたため、そのサイトのcurl
またはwget
は問題なく動作しました。
誰かが興味を持っているなら、これは私が組み込みCSSについて学ぶために this ページを読んでいて、例としてサイトのcssを調べようとしたために起こりました。私が問題を抱えていた実際のURLは this で、curl
は最終的に
curl -L -H 'Referer: http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
そして、wgetは
wget --referer='http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
とても興味深い。
HTTPリクエストには、curlまたはwgetで設定されていないヘッダーがさらに含まれている場合があります。例えば:
key=val
を指定すると、curl
の-b key=val
(または--cookie key=val
)オプションを使用してCookieを設定できます。curl
オプションは-e URL
および--referer URL
です。curl
で-u user:password
(または--user user:password
)オプションを使用して設定できます。Mozilla
で始まらない、またはWget
を含まないユーザーエージェントを拒否する)またはcurl
)。通常、ブラウザーの開発者ツール(FirefoxおよびChromeサポート))を使用して、ブラウザーから送信されたヘッダーを読み取ることができます。接続が暗号化されていない(つまりHTTPSを使用していない)場合は、次に、Wiresharkなどのパケットスニファをこの目的で使用できます。
これらのヘッダーに加えて、Webサイトは状態を変更する舞台裏でいくつかのアクションをトリガーする場合もあります。たとえば、ページを開くときに、ダウンロードリンクを準備するためにバックグラウンドで要求が実行される可能性があります。または、ページでリダイレクトが発生します。これらのアクションは通常Javascriptを使用しますが、これらのアクションを容易にするために非表示のフレームがある場合もあります。
ダウンロードサイトからファイルを簡単に取得する方法を探している場合は、 plowshare に含まれているプラウダウンをご覧ください。
Chrome開発者ツール(v26.0以降)およびFirebug(以降 v1.12 )。この機能には、[ネットワーク]タブのリクエスト行を右クリックしてアクセスできます。
上記のすべてを試したが運がなかった。開発者のブラウザツールを使用してユーザーエージェント文字列を取得しました。以下を追加すると、成功します。
--user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
あなたが求めているものに応じて、それはクッキーかもしれません。 Firefoxでは、問題のページの[ページ情報を表示]で右クリックすることができます。 「セキュリティ」アイコンを選択し、「Cookieの表示」ボタンをクリックします。
クッキーを困惑させるためには、Firefoxの「ライブHTTPヘッダー」プラグインが不可欠です。どのCookieが設定され、どのCookieがWebサーバーに送り返されるかを確認できます。
wget
はCookieで動作しますが、Cookieを送信しなかったというヒントを与えないため、完全に腹立たしいです。あなたの最善の策は、ブラウザからすべての関連するCookieを削除し、それが取る最初のログインまたはページ表示シーケンスを実行することです。 CookieとPOSTまたはGETパラメータについては、「ライブHTTPヘッダー」を参照してください。「-keep-session-cookies」を使用してwget
で最初のログイン手順を実行し、 「--save-cookies」オプション。テキストエディタで確認できるCookieファイルが提供されます。wget --load-cookies
次のステップで使用するCookieファイル。
これが発生するもう1つの理由は、サイトでSSLが必要な場合です。ブラウザはHTTPからHTTPSに自動的に転送しますが、curlとwgetは転送しません。したがって、HTTPではなくHTTPSを使用してリクエストを試してください。