1

我有以下代码:

$url = 'http://' . $host . ':' . $port . $params;
$results = file( $url );

我收到以下异常:

file(http://someurl.com/asd/asd): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

但是我直接在浏览器中访问 URL(存储在 $url 变量中),它工作得很好。为什么我从 PHP 访问它时遇到问题?

4

1 回答 1

2

此错误消息:

HTTP/1.0 403 禁止

...实际上是直接来自您尝试访问的服务器。因此,PHP 出去访问外部文件不是问题。

相反,说服服务器实际上将文件提供给您,就像将文件提供给网络浏览器一样,这更像是一个问题。

我要检查几个问题:

  1. 文件是否受密码保护?Web 浏览器会保存您输入的密码,并允许您重新访问 URL 而无需再次输入密码,但 PHP 不知道使用什么密码。

  2. 也许服务器通过检查用户代理字符串来限制非浏览器的访问?

  3. 除非您从同一站点上的另一个页面引荐,否则服务器可能会限制访问?

您可以尝试的一件事是使用在线 HTTP 标头查看器工具尝试直接请求文件。您可以尝试不同的标头、用户代理等,看看是否可以重现问题。

如果我不得不猜测,我的钱将用于第一个问题 - 需要密码。但是,如果不知道实际的 URL,就无法知道。


如果您确实知道是什么阻止了您访问该文件,您应该阅读http 包装器、流上下文,尤其是http 流上下文选项,以了解如何从 PHP 中设置缺失的信息。有多种方法可以指定密码、用户代理、引用标头,甚至是您想要的任何随机 HTTP 标头。

于 2013-07-23T07:04:17.083 回答