【问题标题】:API causes "Curl error: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054"API 导致“Curl 错误:OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”
【发布时间】:2020-03-07 06:29:24
【问题描述】:

这与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 );

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

Curl 错误:OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054

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

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

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

有什么建议吗?

更新:

我对@9​​87654335@ 和CURLOPT_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

我会上传一个私钥,但是这个公共 cacert 没有私钥。

【问题讨论】:

  • 错误10054 表示“对等方重置连接”,表明客户端和服务器之间存在某种连接问题。可能被防火墙或路由问题中断。
  • @Drew010 你说得对,这是防火墙问题,发布答案,如果 Jack Jia 不先解决,我会接受

标签: php azure curl openssl


【解决方案1】:

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

我的环境:

  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)

结果:


建议

所以,这部分代码基本上没问题。

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


更新

经过@LatentDenis 的确认,他终于发现问题是由防火墙引起的,这可以为我们缩小类似问题的范围提供线索。

【讨论】:

  • 感谢您的测试,我继续并在最后更新了我的问题 - 您对正在生成的新错误了解吗?
  • 我意识到这个问题,我试图访问的资源阻止了我们的 IP。如果您修改答案以说明服务器上的块帐户(防火墙问题),我会接受!
  • @LatentDenis 您的案例将为有类似问题的其他人指明方向。在我的答案中更新。谢谢。
【解决方案2】:

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

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

error rpc failed curl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2015-05-26
    • 2021-11-17
    相关资源
    最近更新 更多