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

相关推荐
Harry技术30 分钟前
Spring Boot 4.0 发布总结:新特性、依赖变更与升级指南
spring boot·后端
武子康40 分钟前
大数据-159 Apache Kylin Cube 实战:Hive 装载与预计算加速(含 Cuboid/实时 OLAP,Kylin 4.x)
大数据·后端·apache kylin
疯狂的程序猴1 小时前
Mac 抓包软件怎么选?从 HTTPS 调试、TCP 数据流分析到多工具协同的完整抓包方案
后端
BingoGo1 小时前
使用 PHP 和 Raylib 也可以开发贪吃蛇游戏
后端·php
爱分享的鱼鱼1 小时前
Spring Boot如何整合Redis
后端
知其然亦知其所以然1 小时前
别再被问住!Redis Cluster 一文彻底讲透(Java 面试必背)
redis·后端·面试
codercwh1 小时前
3 分钟上手 Claude Code!API 中转站让 AI 编程效率翻倍
后端
SimonKing1 小时前
OCR告别付费!分享两款可部署的开源工具
后端
爱叫啥叫啥2 小时前
STM32从零实战:深入理解RCC时钟与按键控制LED的底层原理
后端
火山引擎开发者社区2 小时前
火山引擎 MongoDB 进化史:从扛住抖音流量洪峰到 AI 数据底座
后端