Отправка XML через php и получение ответа

#php #xml

#php #xml

Вопрос:

У меня возникли проблемы с отправкой следующего XML через PHP. Кажется, я не могу правильно настроить скрипт, он просто возвращается с пустой страницей. Любые предложения были бы замечательными. Я не сталкиваюсь с какими-либо ошибками, просто ничего не происходит.

 POST /PubServices/WebServices/PublicationWebServices.asmx HTTP/1.1
Host: www.geminifund.com
Content-Type: application/soap xml; charset=utf-8
Content-Length: length


POST /PubServices/WebServices/PublicationWebServices.asmx HTTP/1.1
Host: www.geminifund.com
Content-Type: application/soap xml; charset= utf-8    
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
 <GetHistroricalNav xmlns="http://www.geminifund.com/webservices/">
   <startDate>dateTime</startDate>
   <endDate>dateTime</endDate>
   <portfolio>string</portfolio>
    </GetHistroricalNav>
  </soap12:Body>
 </soap12:Envelope>
  

и мой сценарий выглядит следующим образом

 <?php

$url = "http://www.geminifund.com";

$post_string = '<?xml version="1.0" encoding="UTF-8"?>
<rootNode>
<innerNode>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetHistroricalNav xmlns="http://www.geminifund.com/webservices/">
  <startDate>2011-06-30</startDate>
  <endDate>2011-7-30</endDate>
  <portfolio>1778/portfolio>
</GetHistroricalNav>
 </soap:Body>
</soap:Envelope>
</innerNode>
 </rootNode>';


 $header  = "POST /PubServices/WebServices/PublicationWebServices.asmx HTTP/1.1 rn";
 $header .= "Content-type: text/xml rn";
 $header .= "Content-length: ".strlen($post_string)." rn";
 $header .= "Content-transfer-encoding: text rn";
 $header .= "Connection: close rnrn"; 
 $header .= $post_string;

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
 curl_setopt($ch, CURLOPT_URL,$url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_TIMEOUT, 4);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);

  $data = curl_exec($ch); 

 if(curl_errno($ch))
print curl_error($ch);
 else
    curl_close($ch);

?>
  

Комментарии:

1. Вы получаете что-нибудь обратно в data? Вы уверены, что конечная точка все делает правильно? Кроме того, вы пробовали смотреть, что происходит в прокси, таком как fiddler? Наконец, вы можете не помещать post в заголовки вручную, а использовать соответствующие вызовы setopt для установки его в post-запрос и установки данных.

2. Вам необходимо установить безопасность на вашем сервере. Ваш phpmyadmin широко открыт для Интернета и, вероятно, для остальной части вашего сервера. Сделайте это СЕЙЧАС!!

3. На самом деле вся ваша установка XAMPP вообще не имеет набора безопасности.

Ответ №1:

Когда вы пишете «он просто возвращается с пустой страницей», вы имеете в виду ответ веб-браузера при вводе URL-адреса? Если это то, что вы имеете в виду, какой веб-браузер вы используете? Я рекомендую вам попробовать разные веб-браузеры (Safari, FireFox, Chrome) и посмотреть, какие результаты вы получите.

Комментарии:

1. и я получаю пустую страницу независимо от того, в каком браузере. . вы можете посмотреть сами / / centos.dyndns.biz/test.php

Ответ №2:

Почему вы используете заголовки для установки метода POST и выполнения пользовательского запроса? Curl вполне способен выполнять POST как есть:

 curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
  

пользовательский запрос предназначен для выполнения менее распространенных методов, таких как запрос HEAD или PUT.

Комментарии:

1. я действительно понятия не имею, что я делаю в первый раз, когда я возился с curl и php

Ответ №3:

и PHP имеют класс SoapClient для обработки протокола SOAP. Ты уверен, что хочешь сделать это в рукописном виде, друг? 🙂

Комментарии:

1. у меня есть скрипт .asp, который прекрасно выполняет ddoing, но мой клиент работает на сервере Linux. могу ли я опубликовать свой ASP-скрипт, и кто-нибудь перекодирует его для меня. , эти программы asp2php никогда не работают правильно.

2. ваш код, о котором идет речь, может выглядеть так: $soap = new SoapClient(NULL, array('location' => 'http://www.geminifund.com/PubServices/WebServices/PublicationWebServices.asmx', 'uri' => 'http://www.geminifund.com/webservices/')); print_r($soap->__soapCall('GetHistroricalNav', array('startDate' => 'you arg', etc..))); <br> Кстати, GetHistroricalNav — есть ли опечатка?