大家好,欢迎来到IT知识分享网。
在发post的请求的时候,使用php的curl发起了一个post请求,但是发现返回了307错误。
什么是307
维基百科中这样写:
307 Temporary Redirect是HTTP协议中的一个状态码(Status Code)。可以理解为一个临时的重定向。
但该响应代码与302重定向有所区别的地方在于,收到307响应码后,客户端应保持请求方法不变向新的地址发出请求。(302请求则重定向到新地址时,客户端必须使用GET方法请求新地址。)
调试过程
首先看后端是否接收到前端传过去的正确的数据,包含url,以及post body中携带的数据。
使用postman发起同样的接口调用,发现调用成功
使用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”}]}’
但是并没有找到错误的原因。于是换了个思路
开始疯狂debug php 的curl请求,谷歌307错误的情况。无果。。。
开始转换思路:对比接口开发者调试时发起的调用成功的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]
在代码中更改url,发现成功调用~
一些思考
为什么一开始有“/”postman也调用成功了呢?
很可能是postman做了一些兼容和容错处理吧。
参考文献
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23007.html