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

相关推荐
qq_12498707531 小时前
基于springboot的疾病预防系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·毕业设计
q***2512 小时前
Spring Boot 集成 Kettle
java·spring boot·后端
码事漫谈2 小时前
阿里《灵光》生成的视频下载不带水印的极简方法
后端
舒一笑2 小时前
信息的建筑学:MyBatis Log Panda 如何重构开发者的认知地图
后端·sql·intellij idea
码事漫谈2 小时前
WPF入门指南:解析默认项目结构
后端
iOS开发上架哦3 小时前
7种常见的源代码混淆技术详解:网络安全中的重要防线
后端
回家路上绕了弯3 小时前
单体架构拆微服务:从评估到落地的全流程指南
后端·微服务
疯狂的程序猴3 小时前
手游频繁崩溃闪退原因分析与iOS崩溃日志解析方法
后端
Amos_Web3 小时前
Rust实战(四):数据持久化、告警配置与Web API —— 构建监控系统的功能闭环
前端·后端·rust
sino爱学习3 小时前
FastUtil 高性能集合最佳实践:让你的 Java 程序真正“快”起来
java·后端