我正在针对具有标准 http 和 https 版本的服务编写 gSoap 客户端应用程序。到目前为止,我编写的所有内容都适用于 http 服务,但是当我切换到 https 服务时,突然出现错误。
我对 https 支持的代码所做的唯一更改是在启动时添加以下内容:
soap_ssl_init();
if(soap_ssl_client_context(&_tradeService, SOAP_SSL_SKIP_HOST_CHECK, NULL, NULL, NULL, NULL, NULL)) {
handleError("Failed to set up SSL connection");
return;
}
如果我打开了-DDEBUG
标志,我会收到关于证书的错误:“SSL 验证错误或深度 2 的证书警告:证书链中的自签名证书”这不会导致soap_ssl_client_context
返回错误,我认为不会很重要,因为在我测试时,我并不真正关心对主机进行身份验证。
真正的问题是这个错误:
SOAP 1.2 错误:SOAP-ENV:Sender [无子代码]“无法处理没有有效动作参数的请求。请提供有效的肥皂动作。”
当我尝试向服务提出请求时得到的。如果查看 gsoap 生成的发送日志,我会在传出标头中看到 SoapAction 参数集。事实上,如果我比较 http/https 服务的发送日志,唯一的区别是安全服务的 url 以 https 为前缀。
然后我想可能是服务器出了问题,所以我使用 curl 发送与 gsoap 记录它发送的完全相同的 XML 数据,并具有完全相同的标头。这很好用,我看到了我期望的数据的正常响应。这让我相信也许我设置的 SSL 不正确?
我遇到的另一个不在文档中的问题是,当我使用-DWITH_OPENSSL -lgsoapssl++ -lssl -lcrypto
标志构建时,我仍然收到有关 gsoap 的 ssl 方法的链接器错误。stdsoap2_ssl_cpp.cpp
为了解决这些问题,我必须将其包含在我的构建中,我认为这很奇怪。
在此之前有人尝试过这样做可以给我一些指示吗?