PUT строка данных на сервер XML с использованием PHP - PullRequest
1 голос
/ 28 апреля 2011

Мне нужно поместить строку данных примерно так: ' ... <\ client>' на сервер XMl (пример URL: 'http://example.appspot.com/examples') с использованием PHP. (Контекст: добавление данных нового клиента на сервер).

Я попытался использовать CURLOPT_PUT, с файлом и только с строкой (поскольку для этого требуются CURLOPT_INFILESIZE и CURLOPT_INFILE), но это не работает!

Существуют ли другие функции PHP, которые можно использовать для таких целей? Я искал вокруг, но информация запросов PUT редкая.

Спасибо.

Ответы [ 3 ]

1 голос
/ 05 июня 2012
// Start curl  
    $ch = curl_init();  
// URL for curl  
    $url = "http://example.appspot.com/examples";  

// Put string into a temporary file  
    $putString = '<client>the RAW data string I want to send</client>';

/** use a max of 256KB of RAM before going to disk */  
    $putData = fopen('php://temp/maxmemory:256000', 'w');  
    if (!$putData) {  
        die('could not open temp memory data');  
    }  
fwrite($putData, $putString);  
fseek($putData, 0);  

// Headers  
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
// Binary transfer i.e. --data-BINARY  
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_URL, $url);  
// Using a PUT method i.e. -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);  
0 голосов
/ 22 марта 2017

Другой способ добавить тело строки в запрос PUT с помощью CURL в PHP:

 <?php
        $data = 'My string';
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // Define method type
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Set data to the body request
  ?>

Надеюсь, это поможет!

0 голосов
/ 28 апреля 2011

, так как я до сих пор не работал с cURL, я не могу ответить на эту тему. Если вы хотите использовать cURL, я бы посоветовал посмотреть журнал сервера и посмотреть, что на самом деле не работает (так: действительно ли результат запроса был таким, каким он должен быть?)

Если вы не возражаете против перехода на другую технологию / библиотеку, я бы предложил вам использовать Zend HTTP-клиент , который действительно прост в использовании, прост в использовании и должен удовлетворить все ваши потребности , Тем более, что выполнение запроса PUT так просто:

<?php 
   // of course, perform require('Zend/...') and 
   // $client = new Zend_HTTP_Client() stuff before
   // ...
   [...]
   $xml = '<yourxmlstuffhere>.....</...>';
   $client->setRawData($xml)->setEncType('text/xml')->request('PUT');
?>

Пример кода: Документы Zend Framework # Запросы RAW-данных

...