web-dev-qa-db-ja.com

curlを使用してChromeを使用するのとまったく同じGETリクエストを取得する方法は?

Web API http://something.com/apiがあり、GETを使用して応答本文を取得したい。

これは私のコマンドです:

curl "http://something.com/api"

もちろん失敗し、エラーメッセージが表示されます。

Chromeを使用して上記のURLを入力すると、すべてが正しくなります。ただし、Firefoxでも同じことを行いますが、URLで同じエラーメッセージが表示されます。 Chrome拡張子DHCでアクションを繰り返してみると、リクエストは再び正しい応答を返します。いくつかの検索の後、カールオプション--user-agentが違いを生むと信じています。ユーザーエージェントをChromeに設定する正しい方法は何ですか?またはこれはポイントではありません、問題は他の分野から来ていますか?どうもありがとうございました。

60
wdetac

Curlリクエストでユーザーヘッダー文字列を設定する必要がある場合は、-Hオプションを使用して次のようなユーザーエージェントを設定できます。

curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

Charles Proxy のようなプロキシツールを使用すると、あなたが求めているもののようなものを簡単に作成するのに役立ちます。このSOページを例として使用して、私が行うことは次のとおりです(2015年7月現在、Charlesバージョン3.10を使用)。

  1. Charles Proxyを実行する
  2. ブラウザーを使用してWeb要求を行う
  3. Charles Proxyで目的のリクエストを見つける
  4. Charles Proxyでリクエストを右クリックします
  5. 「cURLリクエストのコピー」を選択します

Copy cURL Request example in Charles 3.10.2

これで、ブラウザで行われたリクエストをミラーリングするターミナルで実行できるcURLリクエストができました。このページへの私のリクエストは次のとおりです(Cookieヘッダーは削除されています)。

curl -H "Host: stackoverflow.com" -H "Cache-Control: max-age=0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" -H "HTTPS: 1" -H "DNT: 1" -H "Referer: https://www.google.com/" -H "Accept-Language: en-US,en;q=0.8,en-GB;q=0.6,es;q=0.4" -H "If-Modified-Since: Thu, 23 Jul 2015 20:31:28 GMT" --compressed http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome
87
Mike Grace

Chrome Developer Toolsを開き、[ネットワーク]タブに移動して要求を行います(ページが更新された場合は、[ログの保存]を確認する必要があります)。左側でリクエストを見つけ、右クリックして「cURLとしてコピー」を選択します。

15
hoodslide

chromeがリクエストで送信しているHTTPヘッダーを確認し(ブラウザ拡張機能またはプロキシを使用)、CURLで同じヘッダーを送信してみます-リクエストを行うヘッダーがわかるまで、1つずつ作業。

curl -A [ユーザーエージェント] -H [ヘッダー] " http://something.com/api "

4
MegaAppBear