关于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, "{}");

相关推荐
不会写代码的里奇10 分钟前
从零开发基于DeepSeek的端侧离线大模型语音助手:全流程指南
c++·后端·音视频
不能放弃治疗16 分钟前
发消息逻辑写在MySQL事务中,导致消费逻辑Bug
后端
Cache技术分享18 分钟前
279. Java Stream API - Stream 拼接的两种方式:concat() vs flatMap()
前端·后端
纯粹的热爱21 分钟前
Rust 安装加速指南
后端
南昌彭于晏28 分钟前
解决springboot静态内部类非空校验无效的问题
java·spring boot·后端
czlczl2002092528 分钟前
MybatisPlusInterceptor实现无感修改SQL的底层原理(源码)
数据库·spring boot·后端·sql
javadaydayup1 小时前
MyBatis 映射值报错的罪魁祸首竟然是 Lombok 的 @Builder?
后端
一 乐1 小时前
景区管理|基于springboot + vue景区管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
superman超哥1 小时前
Rust 减少内存分配策略:性能优化的内存管理艺术
开发语言·后端·性能优化·rust·内存管理·内存分配策略
BingoGo1 小时前
CatchAdmin 2025 年终总结 模块化架构的进化之路
后端·开源·php