2017-04-21 25 views
1

我一直在互联网上试图找到解决我的具体问题,但没有运气。通过身份验证从URL中检索XML

基本上我有我登录,看起来类似这样的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:[email protected]:8781/elements/v4.9/users/'; 
echo $url."<br />"; 
$xml = new SimpleXMLElement($url); 
print_r($xml); 

我不知道如果任一接近或卷曲是否比的SimpleXMLElement(更好),或者如果一个或两者都无法工作。

我添加了截图以显示网站上返回的内容。登录屏幕只是浏览器默认的一个。任何帮助将是惊人的。谢谢!

XML Returned on web page

+0

你能在你想要做什么扩展?这些代码中的任何一个都会导致您正在查找的输出? – miken32

回答

0

你可能会更好使用curl IMO: 你可以尝试这样的事情进行身份验证,卷曲:

$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); 
} 
0

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

+0

感谢您的帮助,但上面的代码似乎不起作用。它会在那里停留一分钟左右,然后什么都不返回。没有控制台错误。我认为我正在尝试做的事很常见,很多人都会有建议:S THanks –

+0

SOrry php错误日志说:PHP警告:file_get_contents(https://some-website.university.edu.au:8781/elements/ v4.9/users /):无法打开流:HTTP请求失败!在第15行的/Users/me/Documents/index.php中,第15行是:$ data = file_get_contents($ url,false,$ context); –