php curl 307错误

在发post的请求的时候,使用php的curl发起了一个post请求,但是发现返回了307错误。

什么是307

维基百科中这样写:
307 Temporary Redirect是HTTP协议中的一个状态码(Status Code)。可以理解为一个临时的重定向。
但该响应代码与302重定向有所区别的地方在于,收到307响应码后,客户端应保持请求方法不变向新的地址发出请求。(302请求则重定向到新地址时,客户端必须使用GET方法请求新地址。)

调试过程

  1. 首先看后端是否接收到前端传过去的正确的数据,包含url,以及post body中携带的数据。
  2. 使用postman发起同样的接口调用,发现调用成功
  3. 使用postman将步骤2中的请求转化为原始的curl请求,发现请求失败。
    原始curl请求如下:
curl -X POST \
  'http://xxx.xx.xx.xxx:8988/api/v2/api/api/?username=xxx&password=xxx' \
  -H 'Accept: */*' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Length: 40' \
  -H 'Content-Type: application/json' \
  -H 'Host: xxx.xx.xx.xxx:8988' \
  -H 'Postman-Token: 8d4926ce-0c9e-4253-941a-e9ede9ceb4cf,367c2906-e3a8-415d-b8d4-fbeb39c3dd30' \
  -H 'Referer: http://xxx.xx.xx.xxx:8988/api/v2/api/api/?username=xxx&password=xxx' \
  -H 'User-Agent: PostmanRuntime/7.15.2' \
  -H 'cache-control: no-cache' \
  -d '{"feed":[{"area":"全国","isp":"bgp"}]}'

但是并没有找到错误的原因。于是换了个思路

  1. 开始疯狂debug php 的curl请求,谷歌307错误的情况。无果。。。
  2. 开始转换思路:对比接口开发者调试时发起的调用成功的curl请求,发现url有一处不同。问号前面没有“/”
// 成功的curl
[http://xxx.xx.xx.xxx:8988/api/v2/api/api?username=xxx&password=xxx]
// 失败的curl
[http://xxx.xx.xx.xxx:8988/api/v2/api/api/?username=xxx&password=xxx]
  1. 在代码中更改url,发现成功调用~

一些思考

  1. 为什么一开始有“/”postman也调用成功了呢?
    很可能是postman做了一些兼容和容错处理吧。

参考文献

307返回码
302返回码

你可能感兴趣的:(php curl 307错误)