2017-07-05 1 views
0

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);  
} 
+0

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. –

+0

@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? –

+0

Ja, ich denke schon, denn wenn Sie 'CURLOPT_PUT' setzen, müssen Sie die Datei mit' CURLOPT_INFILE' und 'CURLOPT_INFILESIZE' setzen. –

Antwort

1

Wenn man sich die aussehen, Er sagt, dass, wenn Sie CURLOPT_PUT zu true dann die Datei auf PUT setzen müssen mit CURLOPT_INFILE und CURLOPT_INFILESIZE (In Ihrem Fall eingestellt werden Sie nicht setzen die Datei).

Einstellung CURLOPT_CUSTOMREQUEST-PUT Methode wird nicht erwartet, die Datei, die die Hauptunterschied zwischen CURLOPT_CUSTOMREQUEST und CURLOPT_PUT ist.

Verwandte Themen