首页  >  文章  >  后端开发  >  如何解决 PHP 中 HTTPS 请求的'无法启用加密”错误?

如何解决 PHP 中 HTTPS 请求的'无法启用加密”错误?

Patricia Arquette
Patricia Arquette原创
2024-10-23 19:00:02979浏览

How to Resolve

“file_get_contents()”失败:解决 HTTPS 请求的“无法启用加密”

问题:

当尝试使用 file_get_contents() 获取 HTTPS 网页时,一些用户遇到错误“无法启用加密”。此问题尤其影响 URL“https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?stockspage=earnings&symbols=AAPL&showPriceLine=yes。”

原因:

该错误源于受影响的网站使用 SSLv3。 PHP 中的 openssl 模块与旧版 SSL 存在已知兼容性问题。

解决方案:

要解决此问题,请修改 file_get_contents() 代码以使用 cURL 扩展,它允许指定 SSL 版本。以下代码片段演示了此解决方案:

<code class="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://eresearch.fidelity.com/eresearch/evaluate/analystsOpinionsReport.jhtml?symbols=api"));</code>

Windows 用户的替代解决方案:

在 Windows 系统上,由于缺乏访问权限,可能会遇到额外的挑战到根证书。要解决此问题:

  1. 从 http://curl.haxx.se/docs/caextract.html 下载根证书。
  2. 指定下载的“cacert.pem”的路径" 使用以下 cURL 选项的文件:
<code class="php">curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/certs/cacert.pem");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);</code>

注意: 确保启用 SSL 验证 (CURLOPT_SSL_VERIFYPEER),否则您将遇到错误。

以上是如何解决 PHP 中 HTTPS 请求的'无法启用加密”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn