2014-10-11 5 views
0

У меня возникли проблемы с получением ответа xml с сервера, это первый раз, когда у меня есть , закодированный с помощью xml в PHP, с использованием cURL (размещение XML-анализа на сервере и получение ответ XML) - весь код ниже:Получение ответа xml и перенаправление с php curl

HTML:

<html> 
<head> 
<title>test</title> 
</head> 
<body> 
<form action="3FieldSample.php" method="post" enctype="multipart/form-data" > 
<div class="form-field title"> 
    <div class="input select"><label for="title">Title</label> 
    <select name="title" id="title" value="mr"> 
<option value="mr">Mr</option> 
<option value="mrs">Mrs</option> 
<option value="dr">Dr</option> 
<option value="miss">Miss</option> 
<option value="ms">Ms</option> 
</select></div>  </div> 


<div class="form-field float-left"> 
     <div class="input select"><label for="fname">First Name</label> 
     <input name="fname" value="" maxlength="150" width="100%" type="text" id="fname" /></div> 
</div> 

<div class="form-field float-left"> 
      <div class="input text"><label for="ApplicationPaydayAppLastName">Last Name</label> 
      <input name="lname" value="" maxlength="150" type="text" id="lname"/></div>  
     </div> 
<div class="submit"> 
<input type="image" src = "submit.jpg" width="25%" alt="submit" id="submit"> 
</div> 
</form> 
</body> 
</html> 

======================= ========================

Обработка:

<?php 
header('Content-Type: text/xml'); 
$xmldoc = new DomDocument('1.0'); 
$xmldoc->preserveWhiteSpace = false; 
$xmldoc->formatOutput = true; 
$url = "http://thesite_2_post_2.com/process.php"; 
$title = $_POST['title']; 
$fname = $_POST['fname']; 
$lname = $_POST['lname']; 

$post_string = '<?xml version="1.0" encoding="UTF-8"?>  
<lead> 
<applicant> 
     <title>'. $title.'</title> 
     <fname>'. $fname.'</fname> 
     <lname>'. $lname.'</lname> 
</applicant> 
</lead>'; 

$header = "POST HTTP/1.0 \r\n"; 
$header .= "Content-type: text/xml \r\n"; 
//#$header .= "Content-type: text/html \r\n"; 
$header .= "Content-length: ".strlen($post_string)." \r\n"; 
$header .= "Content-transfer-encoding: text \r\n"; 
#$header .= "Connection: close \r\n\r\n"; 
$header .= $post_string; 
print ($post_string); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $header); 
###curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

$data = curl_exec($ch); 
curl_close($ch); 
$objResult = json_decode($data); 

# 
# This is an example of how I'm supposed to deal with the response? 
# 
# 
$_SESSION['price'] = 0; 
if ($objResult->purchased == 1) { 
$_SESSION['price'] = $objResult->price; 
$url = urlencode($objResult->redirect_url); 
header('Location: '.$url); 
print $objResult; 
} 
else 
{ 
    echo "something went wrong"; 
} 

?> 

Последний фрагмент выше, является примером того, как я должен иметь дело с ответом, который я не получаю. Это результат, который я получаю: Эта страница содержит следующие ошибки: ошибка в строке 8 в столбце 8: дополнительный контент в конце документа. Ниже представлена ​​рендеринг страницы до первой ошибки.

г-н Питер грифон

При просмотре источника я получаю этот выход (без ведущих хэштегов):

#<?xml version="1.0" encoding="UTF-8"?>  
#<lead> 
#<applicant> 
    #<title>mr</title> 
    #<fname>peter</fname> 
    #<lname>griffin</lname> 
#</applicant> 
#</lead>something went wrong 

Любая помощь в получении XML-ответ от сервера будет оценена.

+1

И ваш вопрос? Это сообщение об ошибке? Что непонятно с ним для вас? Также, пожалуйста, заново создайте пример с нуля, который демонстрирует вашу проблему с минимальными данными и кодом при необходимости. Это чаще всего помогает вам устранить любые ошибки. – hakre

ответ

1

cURL обрабатывает многие детали запроса HTTP для вас, включая заголовки. Отправка документа XML можно упростить следующим образом:

[...] 
$cu = curl_init($url); 
curl_setopt($cu, CURLOPT_POSTFIELDS, $post_fields); // This implies CURLOPT_POST = true. 
curl_setopt($cu, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($cu, CURLOPT_HTTPHEADER, [ 
    "Content-Type: text/xml" 
]); 
$data = curl_exec($cu); 
[...] 

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

В качестве примечания, вы должны быть осторожными, вставляя параметры POST без проверки в свой XML. Этот код:

$title = $_POST['title']; 

представляет уязвимость, потому что злоумышленник может отправлять что-либо в HTTP-запросах. Что делать, если какой-либо XML отправляется как значение?

+0

Спасибо за вашу заботу Али Бен, я буду проверять почтовые запросы после того, как я получу скрипт, я попробую код сверху и отчитаюсь. Еще раз спасибо. – Jimmy8t8