您在這裡

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 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。