通过浏览器无痕模式访问url正常,在bash中通过curl访问却报错500,为什么?

有这样的一串url,比如:http://gitlab.com/777/issues?page=1&per_page=5
通过浏览器 无痕模式 下访问,可以正常返回json数据,此时浏览器并没有cookie也不带特殊的请求头数据。
通过本地的 git bash 使用 curl 访问,如 curl http://gitlab.com/777/issues?page=1&per_page=5 得到的结果是个 500 Internal Server Error 的页面。

1、为什么2种访问方式会得到不同的结果?
2、怎样才能在sh中获取到接口的数据?

阅读 3.6k
2 个回答

感谢 @唯一丶@neko_cannon ,提供了思路帮我解决了问题。

经过最终排查发现,问题出在我的写法上(url要加引号)
错误的写法: curl http://gitlab.com/777/issues?page=1&per_page=5
正确的写法: curl "http://gitlab.com/777/issues?page=1&per_page=5"

curl开vvv,浏览器开个fiddler或者直接f12里面看看header少啥然后补上。。。

curl的默认请求头很精简

GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.68.0
Accept: */*

常见的请求头

GET / HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,mt;q=0.5
Cache-Control: 
Cookie:
Host: 
Upgrade-Insecure-Requests: 
User-Agent: UA

用法ex.
curl -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: zh-cn' https://www.baidu.com

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏