file_get_contents 访问 ssl 错误的两种解决方法

第一种编辑PHP.INI文件,打开OPENSSL支持选项

用文本编辑器打开php.ini文件,extension=php_openssl.dll去掉前面的分号,allow_url_include = off改为allow_url_include = On,然后重启服务就可以了。如图

 

第二种跳过https验证,在国内比较少见,我也是偶然的机会在国外网站发现了,参考:https://stackoverflow.com/questions/26148701/file-get-contents-ssl-operation-failed-with-code-1-and-more
 
文中代码是这样的:
1
2
3
4
5
6
7
8
9
10
11
<?php
$arrContextOptions=array(
    “ssl”=>array(
        “verify_peer”=>false,
        “verify_peer_name”=>false,
    ),
); 
 
 
echo$response; ?>

关键代码就是这行: “ssl”=>array

 

第三种 下载https证书到服务器

    服务器 下载这个证书,http://curl.haxx.se/ca/cacert.pem
    php.ini 配置
    openssl.cafile = “/etc/ssl/certs/cacert.pem”//你实际下载证书的路径
    重启 php 即可

第四种解决方法:

使用cURL 函数处理 https 的参数,获取文件内容

    <?php
    function getSSLPage($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSLVERSION,3);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
     
    var_dump(getSSLPage("https://xxx.xxx.xxx"));
    ?>

第五种方法,如果你使用Snoopy.php

可以设置Snoopy参数

Snoopy提供了一些参数可供设置,来支持HTTPS协议。您可以通过设置以下参数来实现:

$snoopy = new Snoopy;

$snoopy->curl_path ='/usr/bin/curl';//设置curl路径

$snoopy->curl_ssl_verify_host = false;//禁用SSL主机验证

 $snoopy->curl_ssl_verify_peer = false;//禁用SSL对等验证

$snoopy->agent ="Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)";//设置浏览器代理

第六种解决方案:使用第三方库php-curl-class

php-curl-class是一个非常流行的PHP类库,它提供了一些强大的方法来支持HTTP和HTTPS协议。通过使用php-curl-class,您可以轻松地解决Snoopy无法抓取HTTPS网站的问题。

<?php require_once 'vendor/autoload.php'; use \Curl\Curl; $curl = new Curl(); $curl->get(''); echo $curl->response; ?>

第七种解决方案:使用第三方库Guzzle

Guzzle是一个非常流行的PHP HTTP客户端,它提供了一些强大的方法来支持HTTP和HTTPS协议。通过使用Guzzle,您可以轻松地解决Snoopy无法抓取HTTPS网站的问题。

<?php require 'vendor/autoload.php'; use GuzzleHttp\Client; $client = new Client(); $res =$client->request('GET',''); echo $res->getBody(); ?>

分享到:
赞(0)