2013-09-06 5 views
5

मेरे पास एक ऐसा एप्लिकेशन है जिसमें वेब सेवा रीस्टफुल एपीआई है। जब मैं ब्राउज़र में HTTP GET अनुरोध करता हूं तो मुझे XML प्रतिक्रियाएं वापस मिलती हैं।PHP कर्ल HTTP एक्सएमएल प्रारूप

जब मैं PHP का उपयोग कर एक ही अनुरोध करता हूं तो मुझे सही जानकारी मिलती है लेकिन यह एक्सएमएल में स्वरूपित नहीं है और इसलिए मैं इसे सरल एक्सएमएल में पास नहीं कर सकता।

मेरा कोड यहां है।

<?php 
//Deifne user credentials to use with requests 
     $user = "user"; 
     $passwd = "user"; 

     //Define header array for cURL requestes 
     $header = array('Contect-Type:application/xml', 'Accept:application/xml'); 

     //Define base URL 
     $url = 'http://192.168.0.100:8080/root/restful/'; 

     //Define http request nouns 
     $ls = $url . "landscapes"; 

     //Initialise cURL object 
     $ch = curl_init(); 

     //Set cURL options 
     curl_setopt_array($ch, array(
      CURLOPT_HTTPHEADER => $header, //Set http header options 
      CURLOPT_URL => $ls, //URL sent as part of the request 
      CURLOPT_HTTPAUTH => CURLAUTH_BASIC, //Set Authentication to BASIC 
      CURLOPT_USERPWD => $user . ":" . $passwd, //Set username and password options 
      CURLOPT_HTTPGET => TRUE //Set cURL to GET method 
     )); 

     //Define variable to hold the returned data from the cURL request 
     $data = curl_exec($ch); 

     //Close cURL connection 
     curl_close($ch); 

     //Print results 
     print_r($data); 

?> 

कोई भी विचार या सुझाव वास्तव में सहायक होंगे।

एस

संपादित करें:

0x100000rhel-mlsptrue9.2.3.0101 

यह प्रतिक्रिया है, तो मैं WizTools बाकी ग्राहक या एक ब्राउज़र का उपयोग है:

तो यह प्रतिक्रिया मैं PHP कोड से मिलता है।

<?xml version="1.0" encoding="UTF-16"?> 
<landscape-response total-landscapes="1" xmlns="http://www.url.com/root/restful/schema/response"> 
    <landscape> 
     <id>0x100000</id> 
     <name>rhel-mlsp</name> 
     <isPrimary>true</isPrimary> 
     <version>9.2.3.010</version> 
    </landscape> 
</landscape-response> 

जैसा कि आप देख सकते हैं कि जानकारी वहां है लेकिन PHP वास्तव में इसे उपयोगी तरीके से प्रस्तुत नहीं कर रहा है।

उत्तर

0

इस

$resp = explode("\n<?", $data); 
    $response = "<?{$resp[1]}"; 


    $xml = new SimpleXMLElement($response); 

यह सब (अपने कोड) पर कुछ भी प्रिंट है का प्रयास करें? echo $data का उपयोग करने का प्रयास करें, लेकिन कंसोल पर परिणामों को देखने के लिए F12 दबाएं।

+0

हम्म यह सुनिश्चित नहीं है कि क्या होने वाला था लेकिन आपके कोड का उपयोग करके मुझे अभी एक घातक अपवाद मिला। – Simon

+0

मुझे कारण मिला कि यह सही तरीके से जानकारी प्रदर्शित नहीं कर रहा है और ऐसा इसलिए है क्योंकि एक्सएमएल में टैग अज्ञात हैं। मुझे लगता है कि मुझे एक स्कीम फाइल शामिल करने की ज़रूरत है ताकि यह पता चल सके कि इसके साथ क्या करना है। – Simon

7

मैं इस प्रश्न का उत्तर ढूंढने में सक्षम था इसलिए मैंने सोचा कि मैं यहां कोड साझा करूंगा।

//Initialise curl object 
$ch = curl_init(); 

//Define curl options in an array 
$options = array(CURLOPT_URL => "http://192.168.0.100/root/restful/<URI>", 
    CURLOPT_PORT => "8080", 
    CURLOPT_HEADER => "Content-Type:application/xml", 
    CURLOPT_USERPWD => "<USER>:<PASSWD>", 
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC, 
    CURLOPT_RETURNTRANSFER => TRUE 
); 

//Set options against curl object 
curl_setopt_array($ch, $options); 

//Assign execution of curl object to a variable 
$data = curl_exec($ch); 

//Close curl object 
curl_close($ch); 

//Pass results to the SimpleXMLElement function 
$xml = new SimpleXMLElement($data); 

print_r($xml); 

आप कोड देख सकते हैं मुख्य बात URL से और अपने स्वयं के विकल्प में बंदरगाह विकल्प को अलग किया गया था कि सभी अलग नहीं है,।

उम्मीद है कि यह किसी और की मदद करता है !!!

एस