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

我有一个 web api http://something.com/api,我想使用 GET 来获得响应主体。

这是我的命令:

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

当然,它会失败并发出错误消息。

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

184214 次浏览

Check the HTTP headers that chrome is sending with the request (Using browser extension or proxy) then try sending the same headers with CURL - Possibly one at a time till you figure out which header(s) makes the request work.

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

如果需要在 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

更新用户代理表单最新版 Chrome 浏览器号: 02-22-2021


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

  1. 启动查尔斯代理服务器
  2. 使用浏览器进行网页申请
  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

打开 Chrome 开发工具,进入网络选项卡,提出请求(如果页面刷新,你可能需要检查“保存日志”)。找到左侧的请求,右键单击“ Copy as cURL”。