Использование метода PUT с библиотекой PHP cUrl

Я могу запустить следующую команду curl (в командной строке):

curl -XPOST --basic -u user:password -H accept:application/json -H Content-type:application/json --data-binary '{ "@queryid" : 1234 }' http://localhost/rest/run?10 

Вот что я делаю до сих пор, однако, похоже, он не работает с сервисом REST, который я использую:

 $headers = array( 'Accept: application/json', 'Content-Type: application/json', ); $url = 'http://localhost/rest/run?10'; $query = '{ "@queryid" : 1234 }'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "user:password"); curl_setopt($ch, CURLOPT_PUT, 1); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $query); curl_setopt($ch, CURLOPT_POSTFIELDSIZE, strlen($query)); $output = curl_exec($ch); echo $output; 

Каким образом вы пытаетесь преобразовать –data-binary с помощью метода PUT?

Вместо создания временного файла на диске вы можете использовать php://temp .

 $body = 'the RAW data string I want to send'; /** use a max of 256KB of RAM before going to disk */ $fp = fopen('php://temp/maxmemory:256000', 'w'); if (!$fp) { die('could not open temp memory data'); } fwrite($fp, $body); fseek($fp, 0); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_INFILE, $fp); // file pointer curl_setopt($ch, CURLOPT_INFILESIZE, strlen($body)); 

Потенциал не является дисковым IO, поэтому он должен быть быстрее и меньше нагрузки на ваш сервер.

Привет всем Я работал с этой конфигурацией:

 // Start curl $ch = curl_init(); // URL for curl $url = "http://localhost/"; // Clean up string $putString = stripslashes($query); // Put string into a temporary file $putData = tmpfile(); // Write the string to the temporary file fwrite($putData, $putString); // Move back to the beginning of the file fseek($putData, 0); // Headers curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // Binary transfer ie --data-BINARY curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $url); // Using a PUT method ie -XPUT curl_setopt($ch, CURLOPT_PUT, true); // Instead of POST fields use these settings curl_setopt($ch, CURLOPT_INFILE, $putData); curl_setopt($ch, CURLOPT_INFILESIZE, strlen($putString)); $output = curl_exec($ch); echo $output; // Close the file fclose($putData); // Stop curl curl_close($ch); 

🙂

Все, что нужно установить, это настраиваемый запрос на повторное использование метода post.

 CURLOPT_URL=>$url, CURLOPT_CUSTOMREQUEST=>'PUT', CURLOPT_POSTFIELDS=>$params,