【问题标题】:Retrieving XML from URL with authentication通过身份验证从 URL 检索 XML
【发布时间】:2017-04-21 07:23:41
【问题描述】:

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

基本上我有一个我登录的 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

【问题讨论】:

  • 你能扩展你想做的事吗?这些代码中的任何一个是否都会导致您正在寻找的输出?

标签: php html xml curl


【解决方案1】:

使用 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);
}

【讨论】:

    【解决方案2】:

    另一种从远程 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

    【讨论】:

    • 感谢您的帮助,但上面的代码似乎不起作用。它只会挂在那里一分钟左右,然后什么也不返回。也没有控制台错误。我认为我正在尝试做的事情很常见,很多人都会有建议:S 谢谢
    • 抱歉,php 错误日志显示:PHP 警告:file_get_contents(some-website.university.edu.au:8781/elements/v4.9/users):打开流失败:HTTP 请求失败!在 /Users/me/Documents/index.php 第 15 行...第 15 行是:$data = file_get_contents($url, false, $context);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多