1. ホーム
  2. curl

[解決済み] Chromeを使うのと全く同じようにcurlを使ってGETリクエストを取得する方法とは?

2022-03-04 22:14:13

質問

ウェブAPIがあります http://something.com/api で、GETでレスポンスボディを取得したい。

これが私のコマンドです。

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

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

Chromeで上記のURLを入力すると、すべて正しく表示されます。しかし、私はFirefoxで同じことを行うには、URLは私に同じエラーメッセージを与える。Chromeの拡張機能DHCで同じことをすると、また正しい応答が得られます。いろいろ調べた結果、curlのオプションである --user-agent が違います。ユーザーエージェントをChromeに設定する正しい方法は何ですか?それとも、これは問題ではなく、他のフィールドから問題が発生するのでしょうか?どうもありがとうございました。

解決方法を教えてください。

curlリクエストにユーザーヘッダの文字列を設定する必要がある場合は -H のようにユーザーエージェントを設定するオプションがあります。

curl -H "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36" http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

ユーザーエージェントフォームを最新のものに更新しました。


のようなプロキシツールを使って チャールズ・プロキシ というような質問をされることがありますが、そのような場合、手短に済ませることができます。ここでは、このSOページを例にして、私が行っていることを説明します(2015年7月現在、Charlesバージョン3.10を使用)。

  1. Charles Proxyを起動する
  2. ブラウザでWebリクエストを行う
  3. Charles Proxyで目的のリクエストを検索する
  4. Charles Proxyでリクエストの上で右クリック
  5. cURLリクエストのコピー」を選択

これで、ブラウザが行ったリクエストを反映したcURLリクエストをターミナルで実行できるようになりました。以下は、このページへの私のリクエストがどのようなものであったかです(クッキーヘッダは削除されています)。

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