首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >file_get_contents返回403禁止

file_get_contents返回403禁止
EN

Stack Overflow用户
提问于 2010-12-28 19:46:37
回答 11查看 109.3K关注 0票数 34

我正在试着做一个网站爬虫。我在我的本地机器上做的,它在那里运行得很好。当我在我的服务器上执行相同的命令时,它显示403禁止错误。我正在使用PHP Simple HTML DOM Parser。我在服务器上得到的错误是:

警告: file_get_contents(http://example.com/viewProperty.html?id=7715888)函数.file-get-contents:无法打开流: HTTP请求失败!HTTP/1.1 403在第40行的/home/scraping/simple_html_dom.php中禁用

触发它的代码行是:

代码语言:javascript
复制
$url="http://www.example.com/viewProperty.html?id=".$id;

$html=file_get_html($url);

我已检查服务器上的php.ini,并且allow_url_fopen已打开。可能的解决方案是使用curl,但我需要知道哪里出错了。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-12-28 19:48:30

这不是您的脚本的问题,而是您所请求的资源的问题。web服务器正在返回“禁止”状态代码。

这可能是它阻止PHP脚本,以防止抓取,或您的IP,如果你做了太多的请求。

您可能应该与远程服务器的管理员谈谈。

票数 22
EN

Stack Overflow用户

发布于 2015-11-14 03:37:59

我知道这是一个相当古老的主题,但我想分享一些想法。

最有可能的情况是,如果你在访问网页时没有获得任何内容,它可能不希望你能够获得这些内容。那么,它如何识别脚本正在尝试访问网页,而不是人呢?一般情况下,它是发送到服务器的HTTP请求中的User-Agent头。

因此,为了让网站认为访问网页的脚本也是人,您必须在请求过程中更改User-Agent头。如果您将User-Agent标头设置为某个常见web浏览器使用的值,则大多数web服务器可能会允许您的请求。

浏览器使用的常用用户代理列表如下所示:

'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'

  • Firefox:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0

  • etc...

  • Chrome

代码语言:javascript
复制
$context = stream_context_create(
    array(
        "http" => array(
            "header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
        )
    )
);

echo file_get_contents("www.google.com", false, $context);

这段代码伪造用户代理并将请求发送给https://google.com

参考文献:

干杯!

票数 64
EN

Stack Overflow用户

发布于 2020-07-12 19:55:07

在包含simple_html_dom.php之后添加以下内容

代码语言:javascript
复制
ini_set('user_agent', 'My-Application/2.5');
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4545790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档