除了使用阿里云站点监控服务以外,我们也一直在使用PHP编写的巡检程序定期检查各个系列的各个站点,最近发现有一些异常报错,主要有两种情况:
1、SSL证书验证不通过
会导致程序反复重试,十一期间就不断报错,在网上查到是Let's Encrypt的SSL证书有些问题,虽然普通浏览者没有影响,但我们Linux服务器上的PHP和wget都不行,可以采取跳过SSL证书验证的办法来临时解决,wget使用wget --no-check-certificate的参数来运行,而PHP程序中添加下面一段:
stream_context_set_default( [ 'ssl' => [ 'verify_host' => false, 'verify_peer' => false, 'verify_peer_name' => false, ], ]);
再用get_headers和file_get_contents就可以访问https的站点了。
2、无User Agent被屏蔽
我们以前在apache htaccess中设置过无User Agent的访问被拒绝,或者在PHP反采集程序中加同样的判断和措施,还有CDN中也可以设置防火墙来屏蔽。
这些天我们运行多年的巡检程序也遇到这种情况而报错,可以这样设置:
$opts = [ "http" => [ "method" => "GET", "header" => "Accept-language: en\r\n" . "Cookie: foo=bar\r\n" . "User-Agent: Linux W-Get Monitor2 Main.php opts\r\n" ] ]; $context = stream_context_create($opts); $content = file_get_contents($url, false, $context);
而更简单的办法是这样:
ini_set('user_agent', 'Linux W-Get Monitor2 Main.php set');
对file_get_contents和get_headers都有效。
评论