curlを使用してChromeを使用するのとまったく同じようにGETリクエストを取得するにはどうすればよいですか?


87

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

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

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

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

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

回答:


123

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. CharlesProxyを実行する
  2. ブラウザを使用してWebリクエストを行う
  3. CharlesProxyで目的のリクエストを見つける
  4. CharlesProxyでリクエストを右クリックします
  5. [cURLリクエストのコピー]を選択します

Charles3.10.2のcURLリクエストの例をコピーする

これで、ブラウザが行ったリクエストをミラーリングするターミナルで実行できる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

Charlesが複数のcURLリクエストを一度にコピー/エクスポートすることをサポートしていれば、はるかに良いでしょう
賢明な2018年

ArcGISなどの一部のAPIは、Accept: text/htmlヘッダーのみを尊重してHTML出力を強制します。
sventechie 2018

2
curl -agent_nameはショートカットです
ppostma1 2018

26

Chromeデベロッパーツールを開き、[ネットワーク]タブに移動してリクエストを行います(ページが更新された場合は、[ログを保持]をオンにする必要がある場合があります)。左側でリクエストを見つけ、右クリックして[Copy ascURL]をクリックします。


ただし、「CopyascURL」のCookieは数分以内に期限切れになります。少なくともほとんどのサイトの場合。新しいCookieを取得するために自動化するにはどうすればよいですか?
GauravKansal20年

6

Chromeがリクエストで送信しているHTTPヘッダーを確認し(ブラウザー拡張機能またはプロキシを使用)、CURLを使用して同じヘッダーを送信してみてください-リクエストが機能するヘッダーがわかるまで、おそらく一度に1つずつ送信してください。

curl -A [user-agent] -H [headers] " http://something.com/api "


私はそれをよく知らない。user-agentをchromeと可能なヘッダーに設定するための実際の例をいくつか教えてください。
wdetac 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.