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


85

我有一个Web API,http://something.com/api并且我想使用GET获取响应正文。

这是我的命令:

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

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

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

Answers:


122

如果需要在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. 使Charles Proxy运行
  2. 使用浏览器发出Web请求
  3. 在Charles Proxy中找到所需的请求
  4. 在Charles Proxy中按要求右键单击
  5. 选择“复制cURL请求”

在Charles 3.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请求,那就更好了
明智的

某些API(例如ArcGIS)将仅遵循Accept: text/html标头来强制HTML输出。
sventechie

2
curl -agent_name是一个快捷方式
ppostma1

23

打开Chrome开发者工具,转到“网络”标签,进行请求(如果页面刷新,则可能需要选中“保留日志”)。在左侧找到请求,右键单击“复制为cURL”。


但是“复制为cURL”中的cookie会在几分钟内过期。至少对于大多数站点而言。我如何使其自动化以获取新的Cookie?
Gaurav Kansal

6

检查chrome正在与请求一起发送的HTTP标头(使用浏览器扩展或代理),然后尝试使用CURL发送相同的标头-一次一次发送,直到弄清楚哪个标头使请求正常工作为止。

curl -A [用户代理] -H [标题]“ http://something.com/api


我不熟悉。您能给我一些真实的例子,将用户代理设置为chrome和可能的标题吗?
wdetac'3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.