无法打开流:从另一个网站获取内容时连接超时

时间:2019-04-25 10:26:23

标签: php web-scraping simple-html-dom snoopy

两年多来,我与另一个网站达成了协议,以便能够使用Simple_html_DOM通过我的脚本获取其内容。现在突然之间没有任何警告,并且仍然与他们保持着合同,无论我使用了什么,我都会得到failed to open stream: Connection timed out-simple_html_DOM,cURL,file_get_content。我什至尝试使用snoopy库来模拟Web浏览器,但仍然使Connection超时。他们以某种方式阻止了连接。它没有IP阻塞,也没有像我在几台不同服务器上尝试过的那样具有相同结果。他们的网站在我的Web浏览器中可以正常加载,因此没有问题。我还有其他方法可以从该网站获取内容吗?当我付钱时,他们拿走我的钱后就公然无视我。

2 个答案:

答案 0 :(得分:3)

服务器可能基于(缺少有效的)用户代理标头(User-Agent:)阻止请求。基本上,此标头可以自我识别服务器是什么:浏览器,机器人,蜘蛛或应用程序等。

您可以尝试使用cURL通过使用curl_setoptCURLOPT_USERAGENT选项(此处为docs)来发送服务器从典型浏览器获得的相同标头。

$url = "https://example.com";
// we're going to impersonate Chrome 74 on MacOS in this example.
$user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"; 
$ch = curl_init();
// this is where we set the option to send the user agent header
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);

如果仍然无法使用,请确保您不需要Cookie或登录凭据。

答案 1 :(得分:1)

如果要使用file_get_content()而不是curl。您可以这样做:

$options  = array('http' => array('user_agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'));
$context  = stream_context_create($options);
$response = file_get_contents('http://domain/path/to/uri', false, $context);