Как сделать post запрос xml?

Пробовал написать сам, но видимо чего-то недопонимаю.

есть xml запрос вида
<ApiRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <ApiKey>xxxxxxxxxxxxx</ApiKey>
  <Data xsi:type="Subscriber">
 <Mode>mode</Mode>
 <Force>false</Force>
 <ListId>1</ListId>
 <Email>test@test.ru</Email>
 <Firstname>testName</Firstname>
  </Data>
</ApiRequest>


И обработчик xml запроса — mysite.com/api/

Следует выполнить POST запрос на добавление нового подписчика из xml и вывести результат (ответное xml).
Как это реализовать? curl?
Прочитал темы по сабжу, но, видимо, не все понял. можно на моем примере пояснить?
  • Вопрос задан
  • 34807 просмотров
Решения вопроса 2
@max_rip
POST не может быть безымянным, должно быть поле в котором будут переданы данные, в вашем случае это xml. Не совсем понятна суть, вам надо решить вопрос с какой стороны сервера или клиента апи?
Ответ написан
MrBlack
@MrBlack Автор вопроса
Всем большое спасибо за помощь)
общими усилиями пошли через другой огород и написали так…

$mail="user@mail.ru";
$name="user";

	$optional_headers = null;
	$url='http://mysite.com/api';
	$data='<ApiRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema"><ApiKey>xxx</ApiKey><Data xsi:type="Subscriber"><Mode>AddAndUpdate</Mode><Force>false</Force><ListId>1</ListId><Email>'.$mail.'</Email><Firstname>'.$name.'</Firstname></Data></ApiRequest>';
	
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@s0rr0w
В POST разрешено передавать «безымянные» данные. Файлы то как-то передаются :)

stackoverflow.com/questions/871431/raw-post-using-curl-in-php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            "http://url/url/url" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,     "body goes here" ); 
curl_setopt($ch, CURLOPT_HTTPHEADER,     array('Content-Type: text/plain')); 

$result=curl_exec ($ch);

Ответ написан
Комментировать
Urvin
@Urvin
В cUrl есть возможность отправлять POST-запросы.
Только для начала Вам необходимо знать имя поля для вставки туда XML-содержания.
Ответ написан
Проконсультируйтесь с тем, кто API предоставляет. Встречал различные варианты, одни ожидают, что придёт application/x-www-form-urlencoded, другие что multipart/form-data, третьи, что application/xml или text/xml, а кто-то может и что-то свое выдумать типа application/mysite+xml.
Ответ написан
seriyPS
@seriyPS
Не слушайте тех, кто говорит что поле в POST не может быть безымянным. Это не правда.

$body_text = '<ApiRequest xmlns:xsi="ht'
...
curl_setopt($ch, CURLOPT_POSTFIELDS,     $body_text); 
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы