Web API http://something.com/api
があり、GETを使用して応答本文を取得したい。
これは私のコマンドです:
curl "http://something.com/api"
もちろん失敗し、エラーメッセージが表示されます。
Chromeを使用して上記のURLを入力すると、すべてが正しくなります。ただし、Firefoxでも同じことを行いますが、URLで同じエラーメッセージが表示されます。 Chrome拡張子DHCでアクションを繰り返してみると、リクエストは再び正しい応答を返します。いくつかの検索の後、カールオプション--user-agent
が違いを生むと信じています。ユーザーエージェントをChromeに設定する正しい方法は何ですか?またはこれはポイントではありません、問題は他の分野から来ていますか?どうもありがとうございました。
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を使用)。
これで、ブラウザで行われたリクエストをミラーリングするターミナルで実行できる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
Chrome Developer Toolsを開き、[ネットワーク]タブに移動して要求を行います(ページが更新された場合は、[ログの保存]を確認する必要があります)。左側でリクエストを見つけ、右クリックして「cURLとしてコピー」を選択します。
chromeがリクエストで送信しているHTTPヘッダーを確認し(ブラウザ拡張機能またはプロキシを使用)、CURLで同じヘッダーを送信してみます-リクエストを行うヘッダーがわかるまで、1つずつ作業。
curl -A [ユーザーエージェント] -H [ヘッダー] " http://something.com/api "