PHP Soap 问题:OpenSSL SSL_read:SSL_ERROR_SYSCALL,errno 54 或 SSL:对等方重置连接

PHP Soap issue: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54 or SSL: Connection reset by peer

我尝试执行 SOAP 请求,

  1. 请求在 Soap 上运行良好UI 给出正确的响应,- 从下面的尝试中复制粘贴有效载荷
  2. 请求在 Postman 上不起作用给出 Could not get any response 错误
  3. 请求无法使用 php SoapClient 库给出 SoapClient::__doRequest(): SSL: Connection reset by peer 错误
  4. 请求无法使用 php curl 给出 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54 错误

所有准备好在无 wsdl 模式和不同的 ssl 验证选项下尝试 SoapClient,并在远程服务器上尝试,因此不是互联网连接问题。

这是第 3 点的代码:

$this->client = new \SoapClient($this->wsdl, [
            'soap_version' => SOAP_1_1,
            'exceptions' => true,
            'trace' => true,
            'cache_wsdl' => WSDL_CACHE_NONE,
        ]);

$response = $this->client->__doRequest(trim($xml), $url, 'getReport', SOAP_1_1);

这是第 4 点的代码:

 $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // both 0 & 1 not works
        curl_setopt($ch, CURLOPT_URL, $location);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); // also tries different values
        curl_setopt($ch, CURLOPT_TIMEOUT, 15); // here too
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, trim($request));

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        curl_setopt($ch, CURLOPT_HEADER, 1); // also not works without this
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // and this

        $response = curl_exec($ch);

我该怎么做才能更深入地调试并解决这个问题?

原来 header 值 SOAPAction 需要像这样在额外的转义引号中:

$headers = [
   "SOAPAction: \"http://example-url.com\"",
]