





Вы можете попробовать Снупи скрипт
Это полезно для хостинг-провайдеров, которые не разрешают обертки fopen
Я использовал его в течение нескольких лет для получения RSS-каналов.
Я думаю, что он даже включен в некоторые более крупные проекты PHP с открытым исходным кодом.
Zend_Http_Client - тоже хорошая идея. Я бы использовал это, если вы собираетесь использовать другие части Zend Framework.
@Bruno, в настоящее время я не использую Zend и не планирую использовать его в будущем. Тем не менее, я планирую использовать CodeIgniter, поэтому я, скорее всего, поищу в этом сообществе и потенциальные решения.
Затем я бы склонился к Snoopy и написал бы небольшую абстракцию или уровень обслуживания для того, для чего он вам нужен. Таким образом, ваш код полагается на ваш уровень обслуживания, а не на Snoopy. Вы сможете поменять его позже.
Копаем здесь несколько костей, но если вам не нужен Снупи для всего, что он использует, разве это не лишнее убийство для этого вопроса? brun, не говоря, что вы здесь неправы, просто подчеркивая, что есть другие уже существующие решения без необходимости использования сторонних библиотек.
Макс, с тех пор я отошел от Снупи за фасадом, чтобы закручиваться за фасадным слоем. Но в будущем может поменять curl на Zend_Http_client.
На самом деле нет стандартного способа. В коде, предназначенном для распространения, я обычно проверяю 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);
}
}
Мне нравится 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();
Хотя сценарий 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);
Это не xml ... это nvp
Ух ты. Я только что посмотрел на Snoopy Script, и он гениально прост. Я обязательно это проверю.