file_get_contents在特定域上显示错误

时间:2018-11-15 03:50:39

标签: php url server hosting file-get-contents

我正在使用file_get_contents()从页面中获取内容。它运行正常,但突然停止工作并开始显示以下错误:

  

“警告:file_get_contents(https://uae.souq.com/ae-en/apple-iphone-x-with-facetime-256gb-4g-lte-silver-24051446/i/):无法打开流:HTTP请求失败!在第6行的/home/xxx/xxxx/xxx/index.php中。

所以我在localserver上尝试了相同的代码,它运行良好。然后我尝试在另一台服务器上,它在那里也正常工作。所以我联系了托管服务提供商,他们说问题出在URL上,他们可能阻止了访问。所以我尝试了另一个URL(https://www.w3schools.com/),它正在获取内容,没有任何错误。

现在我真的很困惑这个问题是什么。如果问题出在服务器上,则其他网址不应该起作用。而且,如果问题出在url上,则该问题不应该在第二台服务器和本地服务器上起作用。

这是测试代码:

<?php
$html= file_get_contents("https://uae.souq.com/ae-en/apple-iphone-x-with-facetime-256gb-4g-lte-silver-24051446/i/");
echo $html;
?>

这是什么问题?即使问题出在URL或服务器上,为什么它仍能更早地正常运行?

1 个答案:

答案 0 :(得分:0)

听起来该网站(souq.com)已阻止您的服务器。该块可能是临时的,也可能是永久的。发生这种情况的原因是,您在短时间内提出了太多请求,或者做了其他看起来“可疑”的事情,从而触发了一种机制,可以防止行为不当的机器人抓取网站。

您可以稍后再试。您可以尝试的另一件事是设置User-Agent请求标头以模拟浏览器。您可以在这里找到操作方法:PHP file_get_contents() and setting request headers

如果您打算制造一个性能良好的机器人,则应将User-Agent标头设置为将请求标识为来自机器人的内容,并且follow the rules网站应在其{{3 }}。