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 请求,
- 请求在 Soap 上运行良好UI 给出正确的响应,- 从下面的尝试中复制粘贴有效载荷
- 请求在 Postman 上不起作用给出
Could not get any response
错误
- 请求无法使用 php SoapClient 库给出
SoapClient::__doRequest(): SSL: Connection reset by peer
错误
- 请求无法使用 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\"",
]
我尝试执行 SOAP 请求,
- 请求在 Soap 上运行良好UI 给出正确的响应,- 从下面的尝试中复制粘贴有效载荷
- 请求在 Postman 上不起作用给出
Could not get any response
错误 - 请求无法使用 php SoapClient 库给出
SoapClient::__doRequest(): SSL: Connection reset by peer
错误 - 请求无法使用 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\"",
]