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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
18 664
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

cURL - единственный известный мне надежный способ получения данных POST, помимо использования разъем.

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

Ответ принят как подходящий

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

Ух ты. Я только что посмотрел на Snoopy Script, и он гениально прост. Я обязательно это проверю.

Sampson 23.01.2009 18:24

Я думаю, что он даже включен в некоторые более крупные проекты PHP с открытым исходным кодом.

BuddyJoe 23.01.2009 20:14

Zend_Http_Client - тоже хорошая идея. Я бы использовал это, если вы собираетесь использовать другие части Zend Framework.

BuddyJoe 23.01.2009 20:15

@Bruno, в настоящее время я не использую Zend и не планирую использовать его в будущем. Тем не менее, я планирую использовать CodeIgniter, поэтому я, скорее всего, поищу в этом сообществе и потенциальные решения.

Sampson 23.01.2009 20:38

Затем я бы склонился к Snoopy и написал бы небольшую абстракцию или уровень обслуживания для того, для чего он вам нужен. Таким образом, ваш код полагается на ваш уровень обслуживания, а не на Snoopy. Вы сможете поменять его позже.

BuddyJoe 24.01.2009 00:24

Копаем здесь несколько костей, но если вам не нужен Снупи для всего, что он использует, разве это не лишнее убийство для этого вопроса? brun, не говоря, что вы здесь неправы, просто подчеркивая, что есть другие уже существующие решения без необходимости использования сторонних библиотек.

M.W. Felker 01.02.2012 23:30

Макс, с тех пор я отошел от Снупи за фасадом, чтобы закручиваться за фасадным слоем. Но в будущем может поменять curl на Zend_Http_client.

BuddyJoe 03.02.2012 01:27

На самом деле нет стандартного способа. В коде, предназначенном для распространения, я обычно проверяю 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

Dss 17.07.2013 15:58

Другие вопросы по теме