如何在PHP中访问密码投影的RESTful API(我知道密码)

How can I access a RESTful API in PHP that is password projected (I know the password)

提问人:Andrew G. Johnson 提问时间:6/11/2009 更新时间:6/11/2009 访问量:1377

问:

例如,这里有一个 URL:https://rexms.net:32005/rexwapi/common/timeframes -- 如果我在浏览器中访问该 URL,输入正确的用户名/密码,它会向我吐出 XML。问题是我需要通过PHP访问它,所以我显然没有得到输入用户名/密码的提示。

当前代码为:

$timeframes_xml = simplexml_load_file(file_get_contents('https://rexms.net:32005/rexwapi/common/timeframes'));
PHP 休息

评论


答:

6赞 David Snabel-Caunt 6/11/2009 #1

我认为你可以简单地使用

https://username:[email protected]:32005/rexwapi/common/timeframes

评论

0赞 Andrew G. Johnson 6/11/2009
这似乎并不一致。我在PHP中做了,但它没有返回结果,当我在MSIE buuuut中尝试时,当我在Google Chrome中尝试时,它确实有效,关于可能导致这种情况的任何想法?
1赞 David Snabel-Caunt 6/11/2009
IE禁用了它,因为它的实现存在安全漏洞。PHP 解析数据并根据需要进行设置:)
4赞 CoderDennis 6/11/2009 #2

您需要将 curlcurl_setopt 一起使用来设置选项。CURLOPT_USERPWD

评论

0赞 Andrew G. Johnson 6/11/2009
我已经尝试了几种方法,但似乎没有得到结果,有没有人可以编写代码示例?
1赞 Jim Walker 6/11/2009 #3

最好使用三个 PEAR 包来解决此问题:HTTP/Socket/Net。使用 HTTP 包,您可以轻松地向基本身份验证领域发出 REST 请求。

有关更多信息,请查看:如何:使PHP REST客户端调用REST资源

2赞 Darrel Miller 6/11/2009 #4

您需要设置 Http 标头 Authorization。将值设置为 base64 编码版本

Basic username:password

也就是说,假设服务器使用基本身份验证。在 Windows 上,可以使用 Fiddler 查看服务器请求的身份验证类型。

0赞 Andrew G. Johnson 6/11/2009 #5

在另一个 SO 问题中找到了我的答案

function get_rex_xml($url)
{
    $curl = curl_init($url);
    curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => TRUE,CURLOPT_USERPWD => 'username:password'));
    ob_start();
    $response_xml = curl_exec($curl);
    ob_end_clean();
    curl_close($curl);
    return $response_xml;
}

header('content-type:text/xml');
echo get_rex_xml('https://rexms.net:32005/rexwapi/common/timeframes');