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');
所以我正在为我们的内部系统制作一个 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');