我正在试着做一个网站爬虫。我在我的本地机器上做的,它在那里运行得很好。当我在我的服务器上执行相同的命令时,它显示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中禁用
触发它的代码行是:
$url="http://www.example.com/viewProperty.html?id=".$id;
$html=file_get_html($url);
我已检查服务器上的php.ini,并且allow_url_fopen已打开。可能的解决方案是使用curl,但我需要知道哪里出错了。
发布于 2010-12-28 19:48:30
这不是您的脚本的问题,而是您所请求的资源的问题。web服务器正在返回“禁止”状态代码。
这可能是它阻止PHP脚本,以防止抓取,或您的IP,如果你做了太多的请求。
您可能应该与远程服务器的管理员谈谈。
发布于 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'
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
:
$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。
参考文献:
干杯!
发布于 2020-07-12 19:55:07
在包含simple_html_dom.php之后添加以下内容
ini_set('user_agent', 'My-Application/2.5');
https://stackoverflow.com/questions/4545790
复制相似问题