カールとwgetによって403が禁止されるのはなぜですか?

カールとwgetによって403が禁止されるのはなぜですか?

wgetファイルを使用してダウンロードしようとしましたが、curl403エラー(禁止)が原因で拒否されました。

同じコンピュータで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には何らかの理由があるかもしれませwgetcurl

(これはファイルを取得できるというわけではありません。ブラウザでファイルを保存できることを知っています。コマンドラインツールが異なる動作をする理由を理解することです。)

修正する

この質問に対する素晴らしい答えに感謝します。私が経験している具体的な問題は、サーバーがリファラーを確認していることです。これをコマンドラインに追加すると、curlファイルを使用して取得できますwget

リファラーを検証するサーバーは、302 でまったく確認を行わない別の場所に移動するため、サイトの一部またはcurl一部がwget正常に動作します。

誰かが興味があれば、私が読んでいるからです。これページにアクセスして埋め込みCSSについて学び、サイトのCSSの例を見てください。問題のある実際のURLは次のとおりです。これ私が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

興味深い。

答え1

HTTP 要求には、カールまたは wget に設定されていないヘッダーをさらに含めることができます。たとえば、

  • クッキー:要求が拒否される最大の理由です。ダウンロードサイトでこれが起こっているのを見たことがあります。クッキーが与えられたら(または)オプションを使用して設定key=valできます。-b key=val--cookie key=valcurl
  • リファラー(sic):Webページのリンクをクリックすると、ほとんどのブラウザは現在のページをリファラーに送信する傾向があります。依存してはいけませんが、このヘッダーがなければ、eBayでもパスワードをリセットできません。はい、これが起こるかもしれません。curlこれのオプションはと-e URLです--referer URL
  • 認証:このアプローチは、ユーザー名/パスワードダイアログボックスの制御不能なユーザーインターフェイスのため、今日ではあまり人気がありませんが、まだ可能です。 (または)オプションをcurl使用して設定できます。-u user:password--user user:password
  • ユーザーエージェント:一部の要求は、ユーザーエージェントによって異なる応答を生成します。これは、良い方法(ミラーリストの代わりに実際のダウンロードを提供する)として使用することも、悪い方法(で始まらない、Mozillaまたは含むWgetユーザーエージェントを拒否curl)として使用することもできます。

通常、ブラウザの開発者ツール(FirefoxとChromeでサポート)を使用して、ブラウザから送信されたヘッダーを読むことができます。接続が暗号化されていない場合(つまり、HTTPSを使用していない場合)、この目的のためにパケットスニファ(たとえばWireshark)を使用することもできます。

これらのヘッダーに加えて、Webサイトは状態を変更するいくつかの非ハインドストーリー操作をトリガーすることもできます。たとえば、ページが開いたら、バックグラウンドでダウンロードリンクを準備するよう要求することができます。または、ページでリダイレクトが発生します。これらのタスクは通常Javascriptを使用しますが、これらのタスクを容易にする隠しフレームワークがあるかもしれません。

ダウンロードサイトからファイルを入手する簡単な方法を探している場合は、以下を含むplowdownを確認してください。すき

答え2

運なしで上記のすべてを試しました。開発者ブラウザツールを使用してユーザーエージェント文字列を取得し、次のものを追加すると成功しました。

--user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"

答え3

上記の回答に追加したい場合は、Chromeデベロッパーツール(v26.0以降)とFirebug(v26.0以降)で利用可能な「cURLにコピー」機能を使用できます。v1.12)。 [ネットワーク]タブのリクエストラインを右クリックしてこの機能にアクセスできます。

答え4

これが発生するもう1つの理由は、サイトにSSLが必要な場合です。ブラウザは自動的にHTTPからHTTPSに渡されますが、カールとwgetはそうではありません。したがって、HTTPの代わりにHTTPSを使用してリクエストを試してみてください。

関連情報