5

我有一个具有 Web 服务 RESTful API 的应用程序。当我在浏览器中发出 HTTP GET 请求时,我会返回 XML 响应。

当我使用 PHP 发出相同的请求时,我得到了正确的信息,但它不是 XML 格式的,所以我不能将它传递给 Simple XML。

这是我的代码。

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

?>

任何想法或建议都会非常有帮助。

小号

编辑:

所以这是我从 PHP 代码中得到的响应:

0x100000rhel-mlsptrue9.2.3.0101

这是我使用 WizTools Rest Client 或浏览器时的响应。

<?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 并没有真正以有用的方式呈现这一点。

4

2 回答 2

8

我能够找到这个问题的答案,所以我想我会在这里分享代码。

//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 中分离出来并放入它自己的选项中。

希望这对其他人有帮助!!!

小号

于 2013-09-09T11:00:46.643 回答
0

尝试这个

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


    $xml = new SimpleXMLElement($response);

它是否打印任何内容(您的代码)?尝试使用echo $data但按 F12 在控制台上查看结果。

于 2013-09-06T16:09:43.283 回答