当前位置

PHP巡检程序跳过SSL验证及设置User Agent的办法

James Qi 在 2021年10月20日 - 17:32 提交

除了使用阿里云站点监控服务以外,我们也一直在使用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都有效。

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。