You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8.2调用Proxmox API出现501分块传输编码不支持问题求助

技术解释:CURLOPT_POST vs CURLOPT_CUSTOMREQUEST 引发的Proxmox API 501错误

核心差异:两个curl选项的行为逻辑

  • curl_setopt($ch, CURLOPT_POST, 1);:这是curl为标准POST请求设计的选项。当你设置这个选项但未通过CURLOPT_POSTFIELDS提供任何请求体数据时,PHP 8.2搭配的curl版本会默认采用chunked传输编码发送请求——因为没有明确指定Content-Length头,curl会自动选择chunked方式处理空请求体。而Proxmox的API服务器(底层基于nginx或自定义服务)不支持这种编码方式,因此返回501 chunked transfer encoding not supported错误。

  • curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");:这个选项强制curl发送指定的HTTP方法(此处为POST),但不会触发curl内置的POST请求处理逻辑。当没有请求体时,curl会发送一个无请求体的POST请求,且不会自动添加chunked编码头,而是明确告知服务器请求体长度为0(或直接省略请求体部分),这完全符合Proxmox停止虚拟机接口对请求格式的要求,因此请求成功。

为什么获取认证票据的接口不受影响?

获取认证票据的API接口需要传递POST数据(如用户名、密码),此时使用CURLOPT_POST=1时,curl会根据POST数据的长度自动设置Content-Length头,不会采用chunked编码,因此服务器可以正常处理请求。

内容的提问来源于stack exchange,提问作者Алексей Никитченко

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:03:20