(此问题的原标题为“为什么curl_exec()在此脚本中失败?”但是通过在脚本中添加对curl_errno()
和curl_error()
的调用,我发现问题出在证书,并且我已经相应地编辑了问题。)
以下脚本:
<?php
$sDataFile = '<path>\journal-issue-ToC.htm';
$sURL = 'https://onlinelibrary.wiley.com/toc/14678624/2014/85/1';
$bHeader = false;
$cURLhandle = curl_init();
$FilePointer = fopen($sDataFile, 'wb');
curl_setopt($cURLhandle, CURLOPT_URL, $sURL);
curl_setopt($cURLhandle, CURLOPT_FILE, $FilePointer);
curl_setopt($cURLhandle, CURLOPT_HEADER, $bHeader);
$bResult = curl_exec($cURLhandle);
echo('<br>' . ($bResult === false ? 'Failed to execute' : 'Executed') . ' cURL.');
if(! $bResult) echo('<br>Error #' . curl_errno($cURLhandle) . ': ' . curl_error($cURLhandle));
curl_close($cURLhandle);
fclose($FilePointer);
保存空文件“ journal-issue-ToC.htm”并生成以下浏览器输出:
Failed to execute cURL.
Error #60: SSL certificate problem: unable to get local issuer certificate
因此,当我在浏览器中访问requested URL时,cURL似乎遇到了证书问题。为了使此脚本正常工作,我需要了解什么有关证书的信息?
我正在Windows 7 64位下的IIS 7.5上运行PHP 7.2.2。
答案 0 :(得分:0)
为了使cURL正常工作,我需要了解有关证书的知识,该书article on GitHub中介绍了cURL中对证书的需求以及如何获取和应用它们:
CURLOPT_CAINFO
选项的命令,并指定下载文件“ cacert.pem”的位置。保存ini文件后,重新启动网络服务器以实现更改。我做了几个变化:
CURLOPT_CAINFO
中而不是在文件“ php.ini”中设置curl_setopt()
的值。这样做之后,脚本运行无误,并且输出文件也不为空。但是它包含的内容仍然不是我所需要的,它是new question的主题。