2015-03-24 2 views
-1

Я пытаюсь подключиться к оператору связи, используя их API-документацию.PHP CURL не отправляет xml в метод post

Мне нужно отправить запрос XML (в POST) им вместе с некоторыми учетными данными в методе GET.

Я строю свой сценарий и отправляю XML, но они сказали, что они не получают никакого xml.

<?php 
$url = "http://<IP>:<PORT>/C2SReceiver?LOGIN=abc&PASSWORD=123"; 
$xml = '<?xml version="1.0"?> 
     <COMMAND> 
      <TYPE>k59</TYPE> 
      <DATE>19/03/2015 23:20:20</DATE> 
      <PIN>11000009</PIN> 
      <LOGINID>abc</LOGINID> 
      <PASSWORD>123</PASSWORD> 
      <EXTCODE>0100</EXTCODE> 
      <EXTREFNUM>1230567890</EXTREFNUM> 
     </COMMAND>'; 

    $headers = array(
     "Content-type: text/xml", 
     "Content-length: " . strlen($xml), 
     "Connection: close", 
    ); 
    // configure 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

    // requesting 
    $data = curl_exec($ch); 
    // displaying response in XML 
    echo $data; 
    if(curl_errno($ch)) 
     print curl_error($ch); 
    else 
     curl_close($ch); 
?> 

Когда я отправить запрос, их система говорит: «Неверный формат Сообщение от HashMap»

Они сказали, что они только получают параметры с помощью метода GET. Они не получили никакого XML.

Обратите внимание: если я изменил формат xml, их системный ответ «Недопустимый XML».

Если они не получают мой XML, как они могут сказать, что это недействительно.

Я трачу целый день, чтобы решить это. не знаю, что происходит не так. Пожалуйста, взгляните и предложите мне, что я могу сделать с моей стороны.

Спасибо.

+0

не добавить заголовок длины содержимого вручную, шанс испортить его большой, и локон обрабатывает это автоматически, если вы не делаете это вручную, и вероятность того, что cURL испортит его, намного меньше, чем вероятность того, что вы его испортили – hanshenrik

+0

не добавляйте заголовок «Соединение: закрыть», либо нужно просто установить CURLOPT_FORBID_REUSE = > правда, вот почему его там, я считаю – hanshenrik

+0

Я удалил Content-Length, все еще ту же ошибку. любое другое возможное исправление? – Shuhail

ответ

0

Попробуйте изменить тип содержимого заголовка из текста/xml -> application/xml. На моем CURLOPT_HTTPHEADER при выполнении делать запрос HTTP:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml')); 
+0

Пробовал, но тот же ответ. – Shuhail

0

Ваш код не имеет bug.I протестировал его к моему концу, и я получил данные формата XML в C2SReceiver.php file.i просто использовать этот код для получения данных формата XML.

<?php $x = new SimpleXmlElement(file_get_contents('php://input')); print_r($x);die(); ?> 

или

<?php $x = new SimpleXmlElement(file_get_contents('php://input')); print_r($x);die(); ?> 

для получения XML-данных в C2SReceiver.php принятые завитка

+0

+0

Для получения XML-данных в C2SReceiver.php, прошедших с помощью curl –

+0

Спасибо большое. это было действительно оценено ... – Shuhail

Смежные вопросы