4

我有一个提供 xml 输出的 URL。它需要一个用户名和密码,我可以使用以下格式通过浏览器访问:

http://用户名:密码@url.com

但是,当我尝试通过 php 文件访问它时,我得到了 403 禁止:

$url = "http://username:password@url.com";


$xml = @simplexml_load_file($url);
print_r($http_response_header);

我尝试使用 curl 并将用户代理设置为浏览器,但这仍然没有回显数据。

编辑:

我还尝试使用 pear 的 http 请求 2,它也给出了 403 禁止

4

5 回答 5

7

你应该尝试这样的事情:

$url = "http://username:password@url.com";
$xml = file_get_contents($url);
$data = new SimpleXMLElement($xml);
于 2012-05-17T20:55:04.797 回答
4

对于具有基本身份验证 URL 的 XML,请尝试此操作

$username = 'admin';
$password = 'mypass';
$server = 'myserver.com';

$context = stream_context_create(array(
        'http' => array(
            'header'  => "Authorization: Basic " . base64_encode("$username:$password")
        )
    )
);
$data = file_get_contents("http://$server/", false, $context);
$xml=simplexml_load_string($data);
if ($xml === false) {
    echo "Failed loading XML: ";
    foreach(libxml_get_errors() as $error) {
        echo "<br>", $error->message;
    }
} else {
    print_r($xml);
}
于 2017-01-06T19:42:43.873 回答
1

格式——http://username:password@url.com——是浏览器理解的约定;但如果您以编程方式发出 HTTP 请求,则需要为基本身份验证设置 HTTP 标头。我不认为 *simplexml_load_file* 支持 HTTP 标头,但您可以尝试使用例如:

fopen("http://$username:$password@url.com");
于 2012-05-17T20:53:30.557 回答
0

http://pear.php.net/package/HTTP_Request2允许你做一个

$basicAuthRequest = new HTTP_Request2('http://user:password@url.com');

这里还有一个使用 curl 设置CURL_USERPWD请求的示例

于 2012-05-17T20:54:16.647 回答
0

但它只加载整数。未在 xml 内容中加载字符串。请参阅以下结果集。

 [2] => SimpleXMLElement Object
            (
                [id] => 145894
                [name] => SimpleXMLElement Object
                    (
                    )

                [description] => SimpleXMLElement Object
                    (
                    )

                [start_date] => SimpleXMLElement Object
                    (
                    )

                [end_date] => SimpleXMLElement Object
                    (
                    )

                [allow_deep_link] => 1
                [program_id] => 6981
                [program_name] => SimpleXMLElement Object
                    (
                    )

                [category_name] => SimpleXMLElement Object
                    (
                    )

                [code] => SimpleXMLElement Object
                    (
                    )

                [tracking_url] => SimpleXMLElement Object
                    (
                    )

            )
于 2014-04-19T13:28:34.937 回答