通过身份验证从URL检索XML

时间:2017-04-21 07:23:41

标签: php html xml curl

我一直在互联网上试图找到解决我特定问题但没有运气的方法。

基本上我有一个我登录的URL看起来类似于: https://some-website.university.edu.au:8781/elements/v4.9/users/

将与所有用户一起返回浏览器的XML文本块。

我希望使用curl或SimpleXMLElement()或将XML带入我的php变量并输出它。

我觉得最接近的是:

$username = 'usernameX';
$password = 'passwordX';
$URL = 'https://some-website.university.edu.au:8781/elements/v4.9/users/';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, $username.":".$password);
$result=curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code

echo $result;

$url = 'https://usernameX:passwordX@some-website.university.edu.au:8781/elements/v4.9/users/';
echo $url."<br />";
$xml = new SimpleXMLElement($url);
print_r($xml);

我不确定是否接近或者curl是否优于SimpleXMLElement(),或者是否一个或两个都不会工作。

我添加了一个截图,以显示网站上返回的内容。登录屏幕只是浏览器的默认屏幕。任何帮助都会很棒。谢谢!

XML Returned on web page

2 个答案:

答案 0 :(得分:0)

从远程url解析xml的另一种方法。 (未经测试)

<?php

$username = 'usernameX';
$password = 'passwordX';
$url = 'https://some-website.university.edu.au:8781/elements/v4.9/users/';

$context = stream_context_create(array(
    'http' => array(
        'header' => "Authorization: Basic " . base64_encode("$username:$password"),
        'header' => 'Accept: application/xml'
    )
));

$data = file_get_contents($url, false, $context);
$xml = simplexml_load_string($data);
print_r($xml);

PHP

答案 1 :(得分:0)

使用curl imo可能会更好: 您可以尝试使用curl进行身份验证:

$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);
}