Передача XML через POST

goacher

Новичок
Появилась задача передать XML данные методом POST.
Как это можно сделать?
Вроде через CURL как то делается. Может у кого-то код есть?
спасибо.
 
Пример SOAP-запроса с использованием curl:
PHP:
<?php
$soap = curl_init("http://www.webservicex.net/geoipservice.asmx");
curl_setopt($soap, CURLOPT_POST, 1);
curl_setopt($soap, CURLOPT_RETURNTRANSFER, 1);

$request = <<<XML
<?xml version="1.0" encoding="UTF-8"?> 
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
    <Body>
        <ns1:GetGeoIP xmlns:ns1="http://www.webservicex.net/">
            <ns1:IPAddress>192.168.0.1</ns1:IPAddress>
        </ns1:GetGeoIP>
    </Body>
</Envelope>
XML;

curl_setopt($soap, CURLOPT_HTTPHEADER, 
        array('Content-Type: text/xml; charset=utf-8', 
              'Content-Length: '.strlen($request)));

curl_setopt($soap, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($soap);
curl_close($soap);
 
Не совсем понятен вопрос. В примере выше, после отправки POST-сообщения, ответ от сервера возвращается в переменную $response - $response = curl_exec($soap);
Если убрать curl_setopt($soap, CURLOPT_RETURNTRANSFER, 1);, будет выведен на экран.
Если нужно, можно включить получение HTTP-заголовков от сервера при помощи CURLOPT_HEADER.
http://php.net/manual/en/function.curl-setopt.php
 
Вопрос понял. Тогда наверное нужно сделать так:
PHP:
<?php 
$soap = curl_init("http://localhost/test.php");
curl_setopt($soap, CURLOPT_POST, 1);
curl_setopt($soap, CURLOPT_RETURNTRANSFER, 1);

$request = <<<XML
<?xml version="1.0" encoding="UTF-8"?> 
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
    <Body>
        <ns1:GetGeoIP xmlns:ns1="http://www.webservicex.net/">
            <ns1:IPAddress>192.168.0.1</ns1:IPAddress>
        </ns1:GetGeoIP>
    </Body>
</Envelope>
XML;

$data = "xml=".urlencode($request);

curl_setopt($soap, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($soap);
curl_close($soap);
test.php:
PHP:
<?php
file_put_contents('file', serialize($_REQUEST));
После запуска скрипта смотрим файл file.

Или можно использовать $HTTP_RAW_POST_DATA что получить все тело POST-сообщения.
 
Сверху