Als ich die PUT-Anfrage API über Curl an die REST gesendet habe, fand ich seltsames Verhalten. Wenn Sie den Parameter curl_setopt ($ curl, CURLOPT_PUT, true) setzen, dann Abfragen, bei denen CURLOPT_POSTFIELDS nicht leer ist, dauert die Ausführung der Abfrage 1,5 Minuten (als ob sie von einem Timeout abhängt). Und wenn die gleiche Anfrage mit dem Parameter curl_setopt ($ curl, CURLOPT_CUSTOMREQUEST, "PUT") gesendet wird, dauert die Abfrageausführung ungefähr 1 Sekunde, wie es sein sollte. Kann jemand den grundlegenden Unterschied zwischen diesen Parametern erklären?CURLOPT_PUT vs CURLOPT_POSTFIELDS
Beispielcode:
$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);
}
Wenn 'CURLOPT_PUT'' 'true' 'ist, wird erwartet, dass eine Datei abgelegt wird und die gleiche Datei mit' CURLOPT_INFILE' und 'CURLOPT_INFILESIZE' gesetzt werden muss. Wenn Sie 'CURLOPT_CUSTOMREQUEST' verwenden, erwartet es nicht, dass die Datei PUT wird. –
@DileepKumar Es stellt sich heraus, dass, wenn ich keine Datei an die PATH-Anfrage senden, aber das Objekt senden, dann muss ich immer CURLOPT_CUSTOMREQUEST verwenden? –
Ja, ich denke schon, denn wenn Sie 'CURLOPT_PUT' setzen, müssen Sie die Datei mit' CURLOPT_INFILE' und 'CURLOPT_INFILESIZE' setzen. –