PHP4: отправить XML через HTTPS / POST через cURL?

Я написал класс / функцию для отправки xml через https через PHP4 / cURL, просто интересно, правильный ли это подход или есть лучший.

Обратите внимание, что PHP5 в настоящее время недоступен.

/**
 * Send XML via http(s) post
 *
 * curl --header "Content-Type: text/xml" --data "<?xml version = "1.0"?>...." http://www.foo.com/
 *
 */
function sendXmlOverPost($url, $xml) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);

  // For xml, change the content-type.
  curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));

  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ask for results to be returned
  if (CurlHelper::checkHttpsURL($url)) { 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  }

  // Send to remote and return data to caller.
  $result = curl_exec($ch);
  curl_close($ch);
  return $result;
}

ваше здоровье!

Вау, в настоящее время это не вариант? :( Также, если вы не настроены на cURL, посмотрите HTTP_Request (pear.php.net/package/HTTP_Request).

Till 27.10.2008 06:21
Стоит ли изучать 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 и хотите разрабатывать...
7
1
28 985
4

Ответы 4

Используйте класс SoapClient, поставляемый с большинством установок PHP.

Пример:

$soap = new SoapClient("http://some.url/service/some.wsdl");
$args = array("someTypeName" => "someTypeValue"
              "someOtherTypeName" => "someOtherTypeValue");

$response = $soap->executeSomeService($args);

print_r($response);

Ура, но я не думаю, что используемый мной XML API на самом деле использует SOAP, просто читает строку из сообщения.

starmonkey 27.10.2008 02:45

Если вы используете протокол XML-RPC (похоже, исходя из того, что вы сказали), и вы используете как минимум PHP 4.2, посмотрите http://phpxmlrpc.sourceforge.net/ для библиотек и ресурсов.

$ ch = curl_init ($ serviceUrl);

    if ( $this -> usingHTTPS() )
    {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $this->sslVerifyHost);

    }

    curl_setopt($ch,CURLOPT_POST,TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);    
    curl_setopt ($ch, CURLOPT_POSTFIELDS, "OTA_request = ".urlencode($this->xmlMessage));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $this->xmlResponse = curl_exec ($ch);   

    $this -> callerFactory -> dbgMsg('xmlResponse: <hr><pre>'.htmlentities($this->xmlResponse).'</pre><hr>'. curl_error($ch));
    curl_close ($ch);

    $this->checkResponse();

Отличное решение! Нашел и здесь похожий:

Также они показали, как получить такой XML / JSON на сервере.

// here you can have all the required business checks
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){
    $postText = file_get_contents('php://input');
}

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