以xml格式从服务器获取数据


getting data from server in xml format

我正试图通过php调用web服务。我正在发送一个XML请求,应该为其返回XML响应。但作为回应,我只得到了没有xml标记的数据。我想要正确的xml格式。我还有网站的wsdl文件。如果有人能建议做什么,那将是真正的帮助。提前感谢您抽出时间。

<?php  
$soapUrl=some url';
$xml_post_string='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:urn="urn:ebx-schemas:dataservices_1.0">
   <soapenv:Header>
      <sec:Security>
         <UsernameToken>
            <Username>Some Value</Username>
            <Password>Some Value</Password>
         </UsernameToken>
      </sec:Security>
   </soapenv:Header>
   <soapenv:Body>
      <urn:select_ProductDetail>
         <branch>Product</branch>
         <instance>Product</instance>
         <viewPublication>List Name</viewPublication>
      </urn:select_ProductDetail>
   </soapenv:Body>
</soapenv:Envelope>';


   $headers = array( 
   "Content-Type: text/xml;charset=UTF-8", 
   "Accept: gzip,deflate", 
   "Cache-Control: no-cache", 
   "Pragma: no-cache", 
   "SOAPAction: '"select'"", 
    "Host: Host name",
    "Connection: Keep-Alive",       
   "Content-length: ".strlen($xml_post_string), 
   ); 
   // PHP cURL  for https connection with auth
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_URL, $soapUrl);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
   curl_setopt($ch, CURLOPT_TIMEOUT, 500);
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 500);
   curl_setopt($ch, CURLOPT_MAXREDIRS, 12);
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
   $ss = curl_getinfo($ch);
   $response = curl_exec($ch); 
   print_r($response);
   exit;
   curl_close($ch);   
   ?>

尝试将代码修改为以下内容,以便在BROWSERS中查看

   $ss = curl_getinfo($ch);
   $response = curl_exec($ch); 
   echo '<pre>';
   echo htmlspecialchars(print_r($response, true));
   echo '</pre>';
   #print_r($response);
   exit;
   curl_close($ch);

您没有得到xml格式的输出,因为为了避免这种情况,输出与curl的头部连接在一起,所以请使用下面的代码

//PHP cURL用于使用auth的https连接

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_URL, $soapUrl);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
   curl_setopt($ch, CURLOPT_TIMEOUT, 500);
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 500);
   curl_setopt($ch, CURLOPT_MAXREDIRS, 12);
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
   $ss = curl_getinfo($ch);
   //$response will give you xml format code
   $response = curl_exec($ch); 
   //$xml will create array from that xml format code
   $xml=simplexml_load_string($response);
   print_r($xml);
   exit;
   curl_close($ch);