关于curl在线上环境报400的问题

问题:测试环境调用三方接口正常,线上环境接口报错400。

排查:两个方向:1代码问题,2线上ip没在三方控制后台加白名单。

首先postman模拟请求三方接口正常,于是在postman生成curl指令。

curl --location --request POST 'https://miniapp.xxx.com/xxx/xxx/xxx/xxx/xxx' \

--header 'content-type: application/json' \

--header 'appId: 123456789' \

--header 'secretKey: 123456789abcdefghijklmn' \

--header 'deviceid: 1234567' \

--header 'channelid: 1234567' \

--header 'accessToken: abcdefghijk123456789'

在报错的线上机器执行,可以执行成功,证明不是ip白名单的问题。

那就是代码问题了。

在线上报错那台机器上写个脚本a.php,把自己那段代码贴过去,一遍一遍去调试。最终发现加上这行代码curl_setopt($ch, CURLOPT_POSTFIELDS, "{}");就可以了,即body为空时也需要显式的写这行代码。

原因:线上php扩展curl的版本7.25.0,测试版本7.46.0。

cURL 7.29.0 及之前的版本或HP 5.5.x 及之前的版本,请求体为空且没有设置CURLOPT_POSTFIELDS,可能会导致报错。请注意,这只是针对较旧版本的cURL和PHP扩展的一般性指导。具体的版本和行为可能因操作系统、编译选项和其他因素而有所不同。具体可查阅相关文档或向PHP和cURL社区寻求支持。

解决:加上这行代码:curl_setopt($ch, CURLOPT_POSTFIELDS, "{}");

相关推荐
技术小泽6 分钟前
OptaPlanner入门以及实战教学
后端·面试·性能优化
JavaGuide6 分钟前
利用元旦假期,我开源了一个大模型智能面试平台+知识库!
前端·后端
橙子家1 小时前
Serilog 日志库简单实践(四)消息队列 Sinks(.net8)
后端
Victor3561 小时前
Hibernate(21)Hibernate的映射文件是什么?
后端
pe7er2 小时前
如何阅读英文文档
java·前端·后端
pe7er2 小时前
IDEA 实用小技巧(自用)
后端
Victor3562 小时前
Hibernate(22)Hibernate的注解配置是什么?
后端
喵叔哟2 小时前
15.故障排查与调试
后端·docker·容器·服务发现
开心猴爷3 小时前
Perfdog 成本变高之后,Windows 上还能怎么做 iOS APP 性能测试
后端
rannn_1113 小时前
【Java项目】中北大学Java大作业|电商平台
java·git·后端·课程设计·中北大学