【问题标题】:PHP Get XML from Remote URL with Authentication - 403 ErrorPHP 通过身份验证从远程 URL 获取 XML - 403 错误
【发布时间】:2012-05-18 09:13:12
【问题描述】:

我有一个提供 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 进行所有连接,或者有没有办法解决这个问题? 谢谢!

【问题讨论】:

  • 尝试删除用户:在 curl init 中传递,并将浏览器用户代理添加到标题。
  • 谢谢 我如何添加浏览器用户代理?
  • curl_setopt($process, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5');像这样的东西。
  • 这仍然给出了 403 禁止
  • 我刚刚看到使用 get 请求而不是 post

标签: php xml curl pear http-request


【解决方案1】:

看来您请求的页面非常挑剔。确保完全按照浏览器的方式发送所有标头。

  • 在 Firefox 中安装 Firebug,或使用 Chrome 的检查器
  • 写下请求受保护页面时发送的所有标头
  • 完全按照浏览器的方式从您的 php 脚本中发送标头。
  • 如果它不起作用,请使用 Wireshark 验证您是否真的做对了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多