前言:
公司项目目前用的C++客户端调用Webservice服务器(Java),原本使用的是vs2005添加web,以http方式调用,一切都OK。但是,现在应实际需要,要使用Https形式的Webservice(Java),但是之前的方式会有错误,以下记录此次过程。
说明:
使用的是gsoap+openssl,这次先记录下不验证证书的情况
正文:
好啦,http和https的区别,我就不赘述了,直接开始裸讲~
1、下载gsoap库:https://sourceforge.net/projects/gsoap2/files/gsoap-2.8/,直接解压即可
2、安装openssl:可以编译安装,也可以安装包,我使用的后者~(好吧,我确实懒):http://slproweb.com/download/Win64OpenSSL-1_0_2o.exe(64位)
3、搭建一个有效的https服务器,自己想办法~
4、此处分割线--------------------------------------------,以下为正式操作
5、生成头文件:打开cmd,进入gsoap安装目录D:\gsoap\gsoap-2.8\gsoap\bin\win32(不用cd,直接d:切换盘符),然后cd 进入目录即可(够详细了吧:)),执行以下命令即可
wsdl2h -o gSOAP_http.h https://192.168.10.20:8000/webservice/services/HelloXfire?wsdl
或者在浏览器中进入xml,保存即可
wsdl2h -o gSOAP_https.h test.xml
在当前目录生成一个头文件
6、生成源文件:
soapcpp2 -C gSOAP_http.h -I D:\gsoap\gsoap-2.8\gsoap\import
在当前目录生成好多xml和其他一些文件,好吧,我们其实只用到以下文件(C++):
soapH.h
soapStub.h
SimpleServiceSoap11Binding.nsmap
soapC.cpp
soapClient.cpp
7、我们要用的一共8个文件如下:
gSOAP_http.h
soapH.h
soapStub.h
SimpleServiceSoap11Binding.nsmap
soapC.cpp
soapClient.cpp
D:\gsoap\gsoap-2.8\gsoap\stdsoap2.h
D:\gsoap\gsoap-2.8\gsoap\stdsoap2.cpp
8、把这些文件添加到工程,注意stdsoap2.cpp、soapC.cpp、soapClient.cpp 不需要预编译
9、openssl相关设置:
在工程标签上右键选择属性
在属性页面的“C/C++ --> 预处理器 --> 预处理器定义”中添加上 WITH_OPENSSL(没有这个宏定义,编译器不会编译 soap_ssl_client_context() 函数)
1.1
在属性页面的“链接器 --> 输入 --> 附加依赖项”中添加上
1.2
在属性页面的“VC++ 目录 --> 包含目录”中添加上
1.3
再将
1.4
特别注意:由于安装的是64位OpenSSL版本,所以工程属性也要改为x64,否则会提示函数无法解析
10、End,可以尽情使用了~
示例代码:
int main()
{
struct soap tClientSoap;
_ns1__sayHello tSayHelloSender;
_ns1__sayHelloResponse tSayHelloResponse;
int iResult;
soap_init(&tClientSoap);
if(soap_ssl_client_context(&tClientSoap,
SOAP_SSL_NO_AUTHENTICATION,
NULL, NULL, NULL, NULL, NULL))
{
soap_print_fault(&tClientSoap, stderr);
return -1;
}
else
{
tSayHelloSender.args0 = new string("the beautiful world!\n");
iResult=soap_call___ns2__sayHello(&tClientSoap, NULL, NULL,
&tSayHelloSender, &tSayHelloResponse);
if(iResult==SOAP_OK)
{
cout<<*(tSayHelloResponse.return_)<