Как правильно отправлять и получать XML с помощью curl? - PullRequest
4 голосов
/ 27 октября 2011

Я пытался опубликовать XML и получить ответ от сервера, но безуспешно.

Вот условия на стороне сервера:

  • Запросы на сервер должныотправлять в виде XML по HTTP 1.1.

К HTTP-запросу применяются следующие требования:

  • Тип запроса должен быть POST;
  • A *Заголовок 1014 * должен присутствовать, а общая длина запроса должна быть ниже 16 КБ;
  • Должен присутствовать заголовок Content-Type, содержащий значение типа носителя text/xml;

Вот мой сценарий:

$url = "http://somedomain.com";
$xml = '<?xml version="1.0" encoding="UTF-8"?>
<Request PartnerID="asasdsadsa" Type="TrackSearch"> <TrackSearch> <Title>love</Title>    <Tags> <MainGenre>Blues</MainGenre> </Tags> <Page Number="1" Size="20"/> </TrackSearch> </Request>';
$header  = "POST HTTP/1.1 \r\n";
$header .= "Content-type: text/xml \r\n";
$header .= "Content-length: ".strlen($xml)." \r\n";
$header .= "Connection: close \r\n\r\n"; 
$header .= $xml;
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
$data = curl_exec($ch); 
echo $data;
if(curl_errno($ch))
    print curl_error($ch);
else
    curl_close($ch);

Это дает мне:

 HTTP Error 400. The request URL is invalid.
 Bad Request - Invalid URL

Ответы [ 2 ]

14 голосов
/ 27 октября 2011

Помогает ли это?

<?php
$url = "http://stackoverflow.com";
$xml = '<?xml version="1.0" encoding="UTF-8"?><Request PartnerID="asasdsadsa" Type="TrackSearch"> <TrackSearch> <Title>love</Title>    <Tags> <MainGenre>Blues</MainGenre> </Tags> <Page Number="1" Size="20"/> </TrackSearch> </Request>';

$headers = array(
    "Content-type: text/xml",
    "Content-length: " . strlen($xml),
    "Connection: close",
);

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$data = curl_exec($ch); 
echo $data;
if(curl_errno($ch))
    print curl_error($ch);
else
    curl_close($ch);
?>
0 голосов
/ 27 октября 2011

Из документации .

CURLOPT_CUSTOMREQUEST

Пользовательский метод запроса, который следует использовать вместо "GET" или "HEAD" при выполнении HTTP-запроса.Это полезно для выполнения «УДАЛИТЬ» или других, более неясных HTTP-запросов.Допустимые значения: GET, POST, CONNECT и т. Д .;т.е. не вводите здесь целую строку HTTP-запроса.Например, ввод «GET /index.html HTTP / 1.0 \ r \ n \ r \ n» будет неправильным.

Параметр для CURLOPT_CUSTOMREQUEST должен быть просто POST, и вы можетеиспользуйте CURLOPT_HTTPHEADER для установки заголовков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...