PHP通过身份验证从远程URL获取XML - 403错误

时间:2012-05-18 09:13:12

标签: php xml curl pear http-request

我有一个提供xml输出的URL。它需要用户名和密码,我可以使用以下格式通过浏览器访问:

http://username:password@url.com

然而,当我尝试通过php文件访问它时,我得到403禁用:

$url = "http://username:password@url.com";


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

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

$username = "user";
$password = "pass";
$process = curl_init("http://user:pass@url.com/feed?feed_id=1");
//curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($process);
echo $return;

我也尝试过使用pear的http请求2,这也提供了403禁止

我正在尝试通过PHP拒绝所有连接的服务器,还是有办法解决这个问题? 谢谢!

1 个答案:

答案 0 :(得分:0)

似乎您要求的页面非常挑剔。确保完全像浏览器一样发送所有标题。

  • 在Firefox中安装Firebug,或使用Chrome的检查器
  • 记下请求受保护页面时发送的所有标题
  • 完全按照浏览器的说法从您的php脚本发送标题。
  • 如果它不起作用,请使用Wireshark验证您是否确实正确。

我怀疑该页面还会查找用户代理标题,而不仅仅是密码。

另一个问题可能是您的IP与服务器不同,并且只有您的IP列入白名单。