как опция curl CURLOPT_POSTFIELDS принимает XML напрямую? - PullRequest
0 голосов
/ 07 ноября 2011

Я наткнулся на код, который работает, но мне трудно понять, как он работает. Поскольку почтовый запрос отправляется в паре ключ-значение, но, как вы увидите в этом коде, CURLOPT_POSTFIELDS напрямую назначается для данных XML. В каком "ключе" он отправляется на хост ??

Используется ли какой-либо ключ по умолчанию, если для значения не указан ключ?

Спасибо, ниже приведен полный код.

    $xml_file = '<?xml version="1.0" encoding="UTF-8"?>

<AvailRateUpdateRQ xmlns="http://www.expediaconnect.com/EQC/AR/2007/02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Authentication username="username" password="ECLPASS"/>

<Hotel id="111"/>

<DateRange from="2012-09-22" to="2012-09-26"/>

<RoomType id="222">

<RatePlan id="333">

<Rate currency="USD">

<PerDay rate="100.00"/>

</Rate>

</RatePlan>

</RoomType>

</AvailRateUpdateRQ>

';
    $host = 'host: expediaquickconnect.com';

$accept = 'Accept: application/xml';

$connection = 'Connection: Keep-Alive';

$useragent = 'User-Agent: Mozila/4.0(compatible; MSIE 7.0; Windows NT 5.1; NET CLR 1.0.3705;.NETCLR 1.1.4322; InfoPath.1;.NETCLR 2.0.50727;.NETCLR 3.0.04506.30)';

$acceptlanguage = 'Accept-Language: en-us';

$acceptencoding = 'Accept-Encoding: gzip, deflate';

$contenttype = 'Content-Type: application/xml';



$header = array( $host, $accept, $useragent, $acceptlanguage, $acceptencoding, $contenttype );



$session = curl_init( );

curl_setopt($session, CURLOPT_URL, $post_url );

curl_setopt($session, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($session, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($session, CURLOPT_SSL_VERIFYHOST, 2);

curl_setopt($session, CURLOPT_HTTPHEADER, $header);

curl_setopt($session, CURLOPT_HEADER, FALSE);

curl_setopt($session, CURLOPT_POST, 1);

curl_setopt($session, CURLOPT_POSTFIELDS, $xml_file);  // how  ??

curl_setopt($session, CURLOPT_HTTPGET, FALSE);

curl_setopt($session, CURLOPT_COOKIESESSION, FALSE);



$response = curl_exec ($session);

curl_close ($session);

1 Ответ

2 голосов
/ 09 ноября 2011

Он не отправляет его в «ключе». Все тело POST состоит из данных XML. Только ключи application / x-www-form-urlencoded используют такие ключи, но в этом случае вместо заголовка Content-Type устанавливается application / xml.

...