cURL PUT 不发送正文中的数据

cURL PUT doesn't send the data in body

所以我正在为我们的内部系统制作一个 Moodle 身份验证插件。对于将更新的配置文件信息同步回外部 API 的插件部分,我需要发出 PUT 请求。

我遇到的问题是请求的一部分发送通过,但随后就停止了,最终 curl 操作超时。

我的请求代码:

$curl = curl_init();
$headers = array();
curl_setopt($curl, CURLOPT_PUT, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
array_push($headers, 'Content-Type: application/json');
array_push($headers, 'Expect:');
array_push($headers, 'Connection: keep-alive');

if ($authtoken){
array_push($headers, 'Authorization: Bearer '.$authtoken);
}

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_URL, $serverurl.'/'.$functionname);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_FAILONERROR,true);
$result = curl_exec($curl);

if (curl_error($curl)){
  curl_close($curl);
  return false;
}

curl_close($curl);
return $result;

大部分代码都按预期工作,因为它也用于其他请求并且工作正常。但是,特别是对于像这样的 PUT 请求,它发送了总数中的大约 614 个字节,例如 2324 个字节中的 614 个,根据 Fiddler 的说法,然后它停止。最终,它超时了,我得到了一个错误。

所以我已经修复了它。解决方案是更改此行:

curl_setopt($curl, CURLOPT_PUT, 1);

为此:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');