两年多来,我与另一个网站达成了协议,以便能够使用Simple_html_DOM通过我的脚本获取其内容。现在突然之间没有任何警告,并且仍然与他们保持着合同,无论我使用了什么,我都会得到failed to open stream: Connection timed out
-simple_html_DOM,cURL,file_get_content。我什至尝试使用snoopy库来模拟Web浏览器,但仍然使Connection超时。他们以某种方式阻止了连接。它没有IP阻塞,也没有像我在几台不同服务器上尝试过的那样具有相同结果。他们的网站在我的Web浏览器中可以正常加载,因此没有问题。我还有其他方法可以从该网站获取内容吗?当我付钱时,他们拿走我的钱后就公然无视我。
答案 0 :(得分:3)
服务器可能基于(缺少有效的)用户代理标头(User-Agent:
)阻止请求。基本上,此标头可以自我识别服务器是什么:浏览器,机器人,蜘蛛或应用程序等。
您可以尝试使用cURL通过使用curl_setopt
和CURLOPT_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);