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

相关推荐
vaskilab3 小时前
Schema 全绿,Agent 却把参数编造了
后端
Java与AI落地3 小时前
Spring AI 上手:给现有 Java 服务加一个能用的 AI 接口
后端
Swot3 小时前
SvelteKit 数据流研究:`+page.js` 和 `+page.server.js` 到底谁在跑,数据又去了哪儿
前端·后端
一条Go4 小时前
历史告警归档:为什么"删掉主库行"是最后一步
后端·架构·github
nice_lcj5204 小时前
【从零理解 Spring AI · 16】Agent 与工作流:什么该写死,什么该让模型决定
java·人工智能·后端·spring ai·ai应用开发
梦醒江南4 小时前
Agent 调工具报 504 之后:测试如何设计网络抖动下的幂等与补偿验证?
后端·agent·ai编程
站大爷IP4 小时前
Python的内存分析把我坑惨了,原来tracemalloc和memory_profiler的区别这么大
后端
Captaincc4 小时前
转译:《软件工程师现在该怎么办》
前端·后端·ai编程
用户407522065034 小时前
Vibing Coding 之次享通小程序
后端
Dumbness4 小时前
不传 day 参数,座位图显示全空:用 Python 标准库手写 Web 框架,请求到业务代码前的 5 个细节
后端·python