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について学び、サイトの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=val
curl
- リファラー(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を使用してリクエストを試してみてください。