【问题标题】:How can I read a remote XML file that uses digest authentication?如何读取使用摘要式身份验证的远程 XML 文件?
【发布时间】:2013-10-11 02:33:55
【问题描述】:

我正在使用以下命令在 PHP 网页中读取远程 XML 文件:

    $url = 'http://www.examplesite.com/xml';
    $xml = simplexml_load_file($url);

不幸的是,该站点使用摘要式身份验证,并且通常会弹出用户名/密码框并要求我登录该站点。将我的用户名和密码嵌入 URL 本身(如http://USER:PASSWORD@examplesite.com/)是行不通的,这也不是很安全。

如何(在 PHP 中)进行身份验证以获取 XML 文件?

【问题讨论】:

标签: php xml authentication


【解决方案1】:
function get($url, $user, $pass) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
    curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $res = curl_exec();
    curl_close($ch);
    return $res;
}

你可以用 cURL 做到这一点。请注意,前 3 个 curl 标志 - 禁止重用、新连接、跟随位置可能不需要,但在某些情况下可能需要(302 发布身份验证等)。

【讨论】:

  • 我继续收到“401 - 未经授权”的响应,即使 URL、用户名和密码很好。我让其他人用 cURL 7.21.6 对其进行了测试,他们声称它有效。我的 cURL 版本是 7.30.0。是否需要在我的服务器上启用特定的 cURL 设置才能使其正常工作?
  • 我尝试了 shell 连接,我可以使用摘要进行身份验证。不知道为什么PHP版本不能认证。
猜你喜欢
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多