php - PHP Soap 问题:OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54 or SSL: Connection reset by peer
问题描述
我尝试执行 SOAP 请求,
- 请求在 Soap UI 上运行良好,给出了正确的响应,-从下面的尝试中复制粘贴有效负载
- 请求不适用于邮递员给出
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 模式下尝试 SoapClient,并使用不同的 ssl 验证选项,并在远程服务器上尝试,因此不是互联网连接问题。
这是第 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);
我能做些什么来更深入地调试这个问题并解决它?
解决方案
事实证明,标头值SOAPAction
需要在额外的转义引号中,如下所示:
$headers = [
"SOAPAction: \"http://example-url.com\"",
]
推荐阅读
- django - 使用 DRF 发布 GeoJSON 会导致“函数 st_geomfromewkb(bytea) 不存在”
- excel - VBA 自动化 - 预填充组合框
- javascript - 从数组中克隆或复制对象,然后使用 es6 推送和重命名
- javascript - 在发布版本中未调用 ChartJs beforeDraw 方法
- python - 制作 tf.function 的任何漂亮方法都包含类实例值?
- javascript - 在 Java 中加载其 javascript init 方法后获取 HTML 文件
- java - Javafx Webview 问题由以下原因引起:javafx.fxml.LoadException:
- glibc - make glibc 2.14 期间“__readlink”的类型冲突
- java - Java中的布尔逻辑表达式
- html - 按钮在响应式布局中不可见