如何在 PHP 中将网页作为数组获取时忽略无效的 SSL 证书


how can I ignore invalid ssl certificates in getting a webspage as an array in php?

我有一台打印机(实际上是几台),我想获取他们的状态页面,并在供应不足时制作一个小的 dom 解析器告诉我。没什么大不了的,除了打印机在加载前抛出无效的 SSL 证书警告。我可以使用wget来获取这样的页面:

$wget -m --no-check-certificates 10.4.102.125

但我宁愿只使用 php,如果它不是太复杂的话。

以下是如何将页面下载为数组的基本示例:

<?php
$target = "http://10.4.102.125";
$downloaded_page_array = file($target);
for($i=0; $i<count($downloaded_page_array); $i++)
   echo $downloaded_page_array[$i];
?>

如何在获取网页时忽略无效的 SSL 证书,而只是转到我想要获取的页面,作为 php 中的数组?

我不想更改我的服务器设置。另外,我从未想过如何成功升级任何这些打印机上的SSL证书。

你可以

使用 curl

要跳过无效的 SSL 警告,请使用以下选项:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

例如

<?php 
        // create curl resource 
        $ch = curl_init(); 
        // set url 
        curl_setopt($ch, CURLOPT_URL, "http://10.4.102.125"); 
        //return the transfer as a string 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        // $output contains the output string 
        $output = curl_exec($ch); 
        // close curl resource to free up system resources 
        curl_close($ch);      
?>

由于您使用包装器来检索页面,因此您需要设置上下文选项和参数。在这种情况下,您正在寻找的选项属于SSL(也适用于HTTPS),我相信您要禁用此功能:

verify_peer布尔值

要求验证所使用的 SSL 证书。

设置上下文后,需要将其作为第三个参数传递给文件:

array file ( string $filename [, int $flags = 0 [, resource $context ]] )