[英]PHP Get XML from Remote URL with HTTP Authentication
我有一个提供 xml 输出的 URL。 它需要一个用户名和密码,我可以使用以下格式通过浏览器访问:
但是,当我尝试通过 php 文件访问它时,我收到 403 禁止:
$url = "http://username:password@url.com";
$xml = @simplexml_load_file($url);
print_r($http_response_header);
我尝试使用 curl 并将用户代理设置为浏览器,但这仍然没有回显数据。
编辑:
我也尝试使用 pear 的 http request 2,它也给出了 403 forbidden
你应该尝试这样的事情:
$url = "http://username:password@url.com";
$xml = file_get_contents($url);
$data = new SimpleXMLElement($xml);
对于具有基本身份验证 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);
}
格式 -- http://username:password@url.com -- 是浏览器理解的约定; 但如果您以编程方式发出 HTTP 请求,则需要为基本身份验证设置 HTTP 标头。 我不认为 *simplexml_load_file* 支持 HTTP 标头,但您可以尝试使用例如:
fopen("http://$username:$password@url.com");
http://pear.php.net/package/HTTP_Request2允许你做一个
$basicAuthRequest = new HTTP_Request2('http://user:password@url.com');
还有使用curl设置的一个例子CURL_USERPWD
请求在这里
但它只加载整数。 未在 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
(
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.