cURL PUT不会发送正文数据

时间:2017-09-27 13:58:41

标签: php moodle php-curl

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

我遇到的问题是请求的一部分被发送,但它只是停止并最终卷曲操作超时。

我提出请求的代码:

$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,然后它停止。最终,它超时了,我收到了错误。

1 个答案:

答案 0 :(得分:0)

所以我已经修好了。解决方案是改变这一行:

curl_setopt($curl, CURLOPT_PUT, 1);

对此:

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