CURLOPT_PUT 对比 CURLOPT_POSTFIELDS
CURLOPT_PUT vs CURLOPT_POSTFIELDS
当我通过 curl 向 REST 发送 PUT 请求 API 时,我发现了奇怪的行为。如果设置参数curl_setopt($curl, CURLOPT_PUT, true),则查询,其中CURLOPT_POSTFIELDS 不为空,则查询执行持续 1.5 分钟(好像它取决于某个超时)。而如果用参数curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT")[=22=发送相同的请求],那么查询执行将持续大约 1 秒,这是应该的。有人可以解释一下这些参数之间的根本区别吗?
示例代码:
$data = http_build_query(array("enable"=> 1));
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, BASE_URL .'users/2');
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_PUT, true); // execution time 1.5 min
//curl_setopt ($ curl, CURLOPT_CUSTOMREQUEST, "PUT"); - execution time 1 sec
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$out = json_decode(curl_exec($curl));
curl_close($curl);
}
如果你查看 documentation,它说当你将 CURLOPT_PUT
设置为 true
时,PUT
的文件必须设置为 CURLOPT_INFILE
和 CURLOPT_INFILESIZE
(在你的情况下你没有设置文件)。
将 CURLOPT_CUSTOMREQUEST
设置为 PUT
方法不需要文件,这是 CURLOPT_CUSTOMREQUEST
和 CURLOPT_PUT
之间的主要区别。
当我通过 curl 向 REST 发送 PUT 请求 API 时,我发现了奇怪的行为。如果设置参数curl_setopt($curl, CURLOPT_PUT, true),则查询,其中CURLOPT_POSTFIELDS 不为空,则查询执行持续 1.5 分钟(好像它取决于某个超时)。而如果用参数curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT")[=22=发送相同的请求],那么查询执行将持续大约 1 秒,这是应该的。有人可以解释一下这些参数之间的根本区别吗?
示例代码:
$data = http_build_query(array("enable"=> 1));
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, BASE_URL .'users/2');
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_PUT, true); // execution time 1.5 min
//curl_setopt ($ curl, CURLOPT_CUSTOMREQUEST, "PUT"); - execution time 1 sec
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$out = json_decode(curl_exec($curl));
curl_close($curl);
}
如果你查看 documentation,它说当你将 CURLOPT_PUT
设置为 true
时,PUT
的文件必须设置为 CURLOPT_INFILE
和 CURLOPT_INFILESIZE
(在你的情况下你没有设置文件)。
将 CURLOPT_CUSTOMREQUEST
设置为 PUT
方法不需要文件,这是 CURLOPT_CUSTOMREQUEST
和 CURLOPT_PUT
之间的主要区别。