我有一个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版):
您现在有一个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)
hoo*_*ide 16
打开Chrome开发者工具,转到网络标签,提出您的请求(如果页面刷新,您可能需要选中"保留日志").在左侧找到请求,右键单击"复制为cURL".
检查 chrome 随请求发送的 HTTP 标头(使用浏览器扩展或代理),然后尝试使用 CURL 发送相同的标头 - 可能一次一个,直到您确定哪个标头使请求起作用。
curl -A [user-agent] -H [headers] " http://something.com/api "