2013-09-06 17 views
5

Mam aplikacji, która ma Web Services REST API. Kiedy wysyłam żądania HTTP GET do przeglądarki, otrzymuję odpowiedzi XML.PHP cURL HTTP GET XML Format

Kiedy robię ten sam wniosek za pomocą PHP uzyskać prawidłowe informacje, ale to nie jest sformatowany w formacie XML, a więc nie można przekazać je do prostego XML.

Oto mój kod.

<?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); 

?> 

Wszelkie przemyślenia lub sugestie byłyby bardzo pomocne.

S

EDIT:

Więc to jest odpowiedź uzyskać od kodu PHP:

0x100000rhel-mlsptrue9.2.3.0101 

To jest odpowiedź, jeśli używam WizTools Rest klienta lub przeglądarki.

<?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> 

Jak widać, informacje są dostępne, ale PHP nie przedstawia tego w użyteczny sposób.

Odpowiedz

0

Spróbuj

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


    $xml = new SimpleXMLElement($response); 

Czy to w ogóle coś wydrukować (kod)? Spróbuj użyć echo $data, ale naciśnij F12, aby wyświetlić wyniki na konsoli.

+0

Hmm nie jestem pewien, co miało się wydarzyć, ale używając twojego kodu właśnie dostałem fatalny wyjątek. – Simon

+0

Znalazłem powód, dla którego nie wyświetla poprawnie informacji, a to dlatego, że znaczniki w pliku XML są nieznane. Myślę, że muszę dołączyć plik schematu, aby wiedział, co zrobić z tym wszystkim. – Simon

7

udało mi się znaleźć odpowiedź na to pytanie, więc pomyślałem, że podzielę kod tutaj.

//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); 

Jak widać kod nie jest wcale tak różne, najważniejsze było oddzielenie opcję portu z URL-i do własnego wyboru.

Mam nadzieję, że to pomoże ktoś inny się !!!

S