API导致“卷曲错误:OpenSSL SSL_read:SSL_ERROR_SYSCALL,错误10054”

时间:2019-11-11 14:45:09

标签: php azure curl openssl

这与homesteadvagrantlaravel不相关。

我在Windows Azure服务器上的PHP 7.3上运行了一个应用程序服务。

以下是与cURL通话相关的代码:

$resCurl = curl_init();

$url_API = 'https://example.com/api/someMethod';

curl_setopt( $resCurl, CURLOPT_HTTPHEADER,  array( 'Content-type: APPLICATION/JSON; CHARSET=UTF-8' ) );
curl_setopt( $resCurl, CURLOPT_POSTFIELDS, $jsonRequest );

curl_setopt( $resCurl, CURLOPT_POST, true );
curl_setopt( $resCurl, CURLOPT_URL, $url_API );
curl_setopt( $resCurl, CURLOPT_RETURNTRANSFER, 1);

$resultAPI = curl_exec( $resCurl );

执行此操作后,我会继续生成此错误:

  

卷曲错误:OpenSSL SSL_read:SSL_ERROR_SYSCALL,错误10054

运行命令提示符,我可以执行php -i来查看openssl是否具有正在读取的目录以及提到的文件:

Open SSL Version and configuration

我已经检查了目录并从此处下载了最新的cacert.pem文件:https://curl.haxx.se/docs/sslcerts.html

我不想通过将CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEER设置为false来关闭SSL验证来解决此问题。

有什么建议吗?

更新:

我对CURLOPT_SSLCERTCURLOPT_SSLCERTTYPE的选项都进行了硬编码:

curl_setopt( $resCurl, CURLOPT_SSLCERT, 'D:\home\site\cert\cacert.pem');
curl_setopt( $resCurl, CURLOPT_SSLCERTTYPE, 'PEM' );

现在错误有所不同:

  

无法设置私钥文件:“ D:\ home \ site \ cert \ cacert.pem”类型   PEM

我会上传一个私钥,但是此公共证书没有私钥。

2 个答案:

答案 0 :(得分:0)

我已经安装了2.0.2版安装程序版本。 Download

和其他解决方案,您可以在以下链接中找到:

error rpc failed curl

答案 1 :(得分:0)

根据我的测试,一切正常。

我的环境:

  1. Windows 10 1809
  2. PHP 7.3(7.3.11)
  3. 来自https://curl.haxx.se/ca/cacert.pem的证书

代码:

    $resCurl = curl_init();

    $url_API = 'https://example.com/api/someMethod';
    $jsonRequest = '{"a":"aaa"}';
    curl_setopt( $resCurl, CURLOPT_HTTPHEADER,  array( 'Content-type: APPLICATION/JSON; CHARSET=UTF-8' ) );
    curl_setopt( $resCurl, CURLOPT_POSTFIELDS, $jsonRequest );

    curl_setopt( $resCurl, CURLOPT_POST, true );
    curl_setopt( $resCurl, CURLOPT_URL, $url_API );
    curl_setopt( $resCurl, CURLOPT_RETURNTRANSFER, 1);

    $resultAPI = curl_exec( $resCurl );
    $print_r($resultAPI)

结果:

enter image description here


建议

因此,基本上这部分代码很好。

正如您所说,它与宅基地,流浪者或幼虫无关。因此,很可能是网络问题。也许您可以尝试重新启动Azure服务器。


更新

得到@LatentDenis的确认,他最终发现问题是由防火墙引起的,它可以为我们提供线索以缩小类似的问题。