【实例】C++调用webservice接口

手头有个项目需要调用webservice接口,选取的开发语言为c++,下面是我的预研结果:


1、C++调用webservice接口环境准备

使用gsoap工具类库,你可以通过链接去下载最新版本,按照步骤去安装(省去......无非是./configure&&make&&makeinstall)

备注:本人使用的gsoap版本为 gsoap-2.8

2、webservice接口解析获得C++文件

下面这个命令是将webservice接口文档解析到outfile.h文件中,infile.wsdl是你下载的接口文件或者直接将WSDL的URL替换也可以,后面的实例会用到;

wsdl2h -o outfile.h infile.wsdl

or

wsdl2h -o outfile.h http://www.xmethods.net/wsdl/query.wsdl

接下来生成C++接口文件:

soapcpp2 -j outfile.h
若你要生成纯C的接口文件,使用参数 -c:

soapcpp2 -c outfile.h

这一步有时会出现找不到头文件,只需要执行时添加-I参数即可,如:

soapcpp2 -j outfile.h -I/home/***/.../import

走到这一步就完成了准备工作,接下来就可以开始编程了


3、实例

webservice接口地址:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 

此为国内手机号码归属地查询的一个接口,在网上找的,不可尽信,因为接口需要userid,我只是走个过场,SOAP正常即达到目的

第一步生成头文件:

wsdl2h -o mobile.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
此时你的目录中会生成mobile.h的头文件

第二步生成对应的接口类文件:

soapcpp2 -j mobile.h -I/home/demon/gsoap-2.8/gsoap/import
你可以不加-I,除非编译器找不到头文件

第三步开始编程,我只写了个测试的主函数:

#include "soapMobileCodeWSSoapProxy.h"
#include "MobileCodeWSSoap.nsmap"
#include <iostream>
using namespace std;

int main()
{
    MobileCodeWSSoapProxy proxy;
    _ns1__getMobileCodeInfo *info = new _ns1__getMobileCodeInfo();
    info->mobileCode = new string("13488889999");
    info->userID = new string("888");
    _ns1__getMobileCodeInfoResponse *response = new _ns1__getMobileCodeInfoResponse();
    int ret = proxy.getMobileCodeInfo(info, response);
    cout<<"SOAP_OK:"<<SOAP_OK<<";RET:"<<ret<<";RETMSG:"<<*(response->getMobileCodeInfoResult)<<endl;
    return 0;
}

第四步编写简易makefile:

OBJS=test.o soapC.o soapMobileCodeWSSoapProxy.o
EXE=test
CPPFLAGS=-g -Wall -std=c++11 -I/home/demon/gsoap-2.8/gsoap -L/home/demon/gsoap-2.8/gsoap -lgsoap++
$(EXE):$(OBJS)
        g++  $^ -o $@  $(CPPFLAGS)
clean:
        rm *.o

编译通过之后执行结果为:

SOAP_OK:0;RET:0;RETMSG:http://www.webxml.com.cn

RETMSG的结果输出的http前面还有一些乱码我也没有care了,接口调试通即可,俺也没有userid









©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页