如何使用 curl 获取与使用 Chrome 完全相同的 GET 请求?

How to use curl to get a GET request exactly same as using Chrome?

我有一个网站 api http://something.com/api 我想使用 GET 来获取响应正文。

这是我的命令:

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

当然失败了,报错

当我使用Chrome并输入上面的url时,一切都是正确的。但是我用 Firefox 做了同样的事情,url 给了我同样的错误信息。我尝试使用 Chrome 扩展名 DHC 重复该操作,请求再次给出正确响应。经过一些搜索,我相信 curl 选项 --user-agent 有所不同。将用户代理设置为 Chrome 的正确方法是什么?或者这不是重点,问题来自其他领域?非常感谢。

检查 chrome 随请求发送的 HTTP headers(使用浏览器扩展或代理),然后尝试使用 CURL 发送相同的 headers - 可能一次发送一个是时候找出哪个 header(s) 使请求有效了。

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

如果需要在 curl 请求中设置用户 header 字符串,可以使用 -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://whosebug.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

已于 2021 年 2 月 22 日更新 user-agent 表格最新 Chrome


使用像 Charles Proxy 这样的代理工具确实有助于快速完成您所要求的任务。这是我所做的,以这个 SO 页面为例(截至 2015 年 7 月,使用 Charles 3.10 版):

  1. 获取 Charles 代理 运行宁
  2. 使用浏览器发出网络请求
  3. 在 Charles Proxy 中找到所需的请求
  4. 在 Charles Proxy 中右键单击请求
  5. Select 'Copy cURL Request'

您现在有一个 cURL 请求,您可以在终端中 运行 反映您的浏览器发出的请求。这是我对该页面的请求(删除了 cookie header):

curl -H "Host: whosebug.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://whosebug.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome

打开 Chrome 开发者工具,转到“网络”选项卡,提出您的请求(如果页面刷新,您可能需要检查 "Preserve Log")。找到左边的请求,right-click,"Copy as cURL".