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

wde*_*tac 65 user-agent curl

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

这是我的命令:

curl "http://something.com/api"
Run Code Online (Sandbox Code Playgroud)

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

当我使用Chrome并输入上面的网址时,每件事情都是正确的.不过我用Firefox做同样的事情,网址给了我同样的错误信息.我尝试使用Chrome扩展程序DHC重复此操作,请求再次给出正确的响应.经过一番搜索,我相信卷曲选项--user-agent会产生影响.将用户代理设置为Chrome的正确方法是什么?或者这不是重点,问题来自其他领域?非常感谢你.

Mik*_*ace 96

如果需要在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
Run Code Online (Sandbox Code Playgroud)

使用像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 Request示例

您现在有一个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
Run Code Online (Sandbox Code Playgroud)

  • curl -agent_name是捷径 (2认同)

hoo*_*ide 16

打开Chrome开发者工具,转到网络标签,提出您的请求(如果页面刷新,您可能需要选中"保留日志").在左侧找到请求,右键单击"复制为cURL".

  • 但“复制为 cURL”中的 cookie 会在几分钟内过期。至少对于大多数网站来说是这样。我如何自动化它来获取新的cookie? (2认同)

Meg*_*ear 6

检查 chrome 随请求发送的 HTTP 标头(使用浏览器扩展或代理),然后尝试使用 CURL 发送相同的标头 - 可能一次一个,直到您确定哪个标头使请求起作用。

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