2015-11-20 5 views
1

Я работаю над API для получения XML-файла, который, в свою очередь, будет читаться в нашей базе данных. Разбор и все работали с локальными файлами XML. Теперь последний шаг состоял в том, чтобы проверить, работает ли прием XML, и где я попал в блокпост. Пробовал много разных вещей до сих пор, но, похоже, не может заставить его работать. Мы предпочли бы работать с методом REST, но если это действительно не сработает, мы готовы его переключить. У вас много вопросов для отправки или получения XML-файла, но никогда в комбинации. Поэтому надеюсь, что я смогу получить солидный ответ на этот вопрос и не пропущу вопрос, который является дубликатом.PHP отправлять и получать XML

TL; DR: отправка и получение файлов XML через PHP, не знаю, где я делаю ошибку Отправляющая и принимающая части находятся в разных сценариях.

//Sending XML script. 
    $ch = curl_init($url);   
curl_setopt($ch, CURLOPT_MUTE, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml', 
              'Content-length: '.strlen($xmlSend))); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array("recXML" => $xmlSend)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 

//Receiving XML script 
if(isset($_REQUEST['recXML'])){ 
    $xmlTest = $_REQUEST['recXML']; 
} else { 
    echo "NO REQUEST XML FOUND "; 
} 
if(isset($HTTP_RAW_POST_DATA)){ 
    $xmlTest = $HTTP_RAW_POST_DATA; 
} else { 
    echo " NO RAW DATA "; 
} 
if(isset($_POST['recXML'])){ 
    $xmlTest = $_POST['recXML']; 
}else{ 
    echo " NO XML RECEIVED "; 
} 
if(!isset($xmlTest)){ 
    return; 
} 

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

EDIT:

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

//Sending script:  
$ch = curl_init($url);   
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', 
              'Content-length: '.strlen($xml))); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 

//receiving script 
$xmlTest = file_get_contents("php://input"); 

echo $xmlTest; 
$res = simplexml_load_string($xmlTest); 
if($res === false){ 
    echo "Failed loading XML: "; 
    foreach(libxml_get_errors() as $error){ 
     echo "<br>", $error->message; 
    } 
    return; 
} else { 
    //print_r($res); 
} 
+0

Какая ошибка вы получаете? – NaeiKinDus

+0

Он не дал ошибку, просто сообщения, которые я возвращаю, когда XML пуст. – Kezufru

ответ

2

Вы должны послать Content-Type, как application/xml так что ваш код будет

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', 
              'Content-length: '.strlen($xmlSend))); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlSend); 

и на приемной стороне вы можете использовать

$xml = file_get_contents("php://input"); 

Для вашего текущего кода вы можете установить содержание в качестве application/x-www-form-urlencoded вы можете использовать $_POST['recXML']

+0

собираюсь проверить это, думаю, что я уже пробовал эти разные комбинации где-то вчера, но я много раз менял эту штуку, не уверен больше. по крайней мере спасибо за ответ: D – Kezufru

+0

Пробовал оба ваши предложения, но все равно получаю сообщение о том, что XML не найден. даже после удаления всех других $ _REQUEST, isset() и т. д. но переменная XML остается пустой – Kezufru

+0

Просто попробуйте с жестко запрограммированным xml вы получаете какие-либо данные. Возможно, из-за размера xml –