2012-05-17 48 views
3

我有一个提供xml输出的URL。它需要用户名和密码,我可以通过浏览器使用的格式访问:PHP通过HTTP身份验证从远程URL获取XML

http://username:[email protected]

然而,当我试图通过一个PHP文件来访问它,我得到一个403禁止:

$url = "http://username:[email protected]"; 


$xml = @simplexml_load_file($url); 
print_r($http_response_header); 

我已经尝试使用curl并将用户代理设置为浏览器,但这仍然不会回显数据。

编辑:

我使用梨的http请求2,其也给出了403禁止

回答

4

你应该尝试这样的事:

$url = "http://username:[email protected]"; 
$xml = file_get_contents($url); 
$data = new SimpleXMLElement($xml); 
0

格式还试图 - http://username:[email protected] - 是一个常规的浏览器理解;但如果您以编程方式发出HTTP请求,则需要设置HTTP头以进行基本身份验证。我不认为*使用simplexml_load_file *支持HTTP头信息,但你可以尝试使用,例如:

fopen("http://$username:[email protected]"); 
0

但它只加载整数。未在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 
        (
        ) 

      ) 
2

对于XML与基本身份验证URL试试这个

$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); 
} 
相关问题