POST XML для URL с PHP и обработкой ответа

На протяжении многих лет я видел множество методов POSTing данных с PHP, но мне любопытно, что такое предложенный метод, если предположить, что он есть. Или, может быть, есть несколько невысказанный, но полу-универсально принятый метод. Это будет также включать обработку ответа.

Solutions Collecting From Web of "POST XML для URL с PHP и обработкой ответа"

Вы можете попробовать скрипт Snoopy
Это полезно для хостинг-провайдеров, которые не допускают обертки fopen
Я использовал его в течение нескольких лет, чтобы захватить RSS-каналы.

Хотя сценарий Snoopy может быть крутым, если вы хотите просто отправлять XML-данные с помощью PHP , почему бы не использовать cURL? Это легко, имеет обработку ошибок и является полезным инструментом уже в вашей сумке. Ниже приведен пример того, как отправлять XML в URL с помощью cURL в PHP.

// url you're posting to $url = "http://mycoolapi.com/service/"; // your data (post string) $post_data = "first_var=1&second_var=2&third_var=3"; // create your curl handler $ch = curl_init($url); // set your options curl_setopt($ch, CURLOPT_MUTE, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //ssl stuff curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // your return response $output = curl_exec($ch); // close the curl handler curl_close($ch); 

cURL – единственный надежный способ, который я знаю, для данных POST, кроме использования сокета .

Теперь, если вы хотите отправить данные через GET, существует несколько способов:
завивать
Розетки
file_get_contents
файл
и другие

Мне нравится Zend_Http_Client из Zend Framework .

Он в основном работает с использованием stream_context_create () и stream_socket_client () .

Небольшой пример:

 $client = new Zend_Http_Client(); $client->setUri('http://example.org'); $client->setParameterPost('foo', 'bar') $response = $client->request('POST'); $status = $response->getStatus(); $body = $response->getBody(); 

На самом деле нет стандартного способа. В коде, предназначенном для распространения, я обычно проверяю cURL , file_get_contents и сокеты , используя первый найденный. Каждый из них поддерживает GET и POST, и каждый из них может быть или не быть доступен (или работать) в зависимости от версии PHP и конфигурации.

В основном что-то вроде:

 function do_post($url, $data) { if (function_exists('curl_init') && ($curl = curl_init($url))) { return do_curl_post($curl, $data); } else if (function_exists('file_get_contents') && ini_get('allow_url_fopen') == "1") { return do_file_get_contents_post($url, $data); } else { return do_socket_post($url, $data); } }