使用gSoap实现WebService接口,gSoap的下载、编译和使用;Qt使用QNetworkAccessManager访问Soap;QtSoap访问Soap

一、WebService介绍

基础知识了解:

Webservice:Web Services 可使应用程序成为 Web 应用程序,Web Services 通过 Web 进行发布、查找和使用。
WSDL:网络服务描述语言,是一门基于 XML 的语言
SOAP:简单对象访问协议
XML:可扩展标记语言
HTTP:超文本传输协议


一、gSoap下载

gSoap下载地址: https://sourceforge.net/projects/gsoap2
在这里插入图片描述
下载后是一个压缩包:gsoap_2.8.133.zip,解压得到gsoap-2.8一个文件夹,需要用到的是:

  • gsoap-2.8\gsoap\bin 目录下有win32和win64可选则,需要其中的soapcpp2.exewsdl2h.exe来编译WebService接口生成代码文件.h&.cpp等
  • gsoap-2.8\gsoap\import 的目录路径用来做编译参数
  • gsoap-2.8\gsoap\stdsoap2.cpp 在使用gSoap时需要添加到项目中
  • gsoap-2.8\gsoap\stdsoap2.h 在使用gSoap时需要添加到项目中
  • gsoap-2.8\gsoap\typemap.dat 用来做编译参数,具体作用未深究,感兴趣的朋友可以研究一下

二、使用gSoap编译wsdl文件实现WebService接口,生成代码

步骤1
将上述文件拷贝到一个新的目录下,即工作目录
在这里插入图片描述
我使用的是win64版本的exe
步骤2 获取.wsdl文件
以天气预报服务为例,网页搜索:http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
是一个xml格式的文档,保存到本地工作目录下:WeatherWS.xmlWeatherWS.wsdl文件。
步骤3
打开cmd命令框,cd进入到工作目录
步骤4 使用wsdl2h.exe生成WebService的头文件
cmd命令: wsdl2h.exe -o myWebService.h -t typemap.dat WeatherWS.xml
执行结果: myWebService.h为生成的文件,用来执行soapcpp2命令生成代码文件

soapcpp2.exe 命令参数:

  • -o 文件名,指定输出头文件
  • -n 名空间前缀 代替默认的ns
  • -c 产生纯C代码,否则是C++代码
  • -s 不要使用STL代码
  • -t 文件名,指定type map文件,默认为typemap.dat
  • -e 禁止为enum成员加上名空间前缀

步骤5 使用soapcpp2.exe命令生成代码文件
cmd命令: soapcpp2.exe -C -L -I D:\gsoap_2.8.108\gsoap-2.8\gsoap\import myWebService.h
执行结果: 生成接口xml文件,以及代码文件:soapH.h、soapStub.h、soapC.cpp、soapClient.cpp、WeatherWSSoap.nsmap等文件。
soapcpp2.exe 命令参数:

  • -C 仅生成客户端代码
  • -S 仅生成服务器端代码
  • -L 不要产生soapClientLib.c和soapServerLib.c文件
  • -c 产生纯C代码,否则是C++代码(与头文件有关)
  • -I 指定import路径(此项是必要的,因前面为指定-s)
  • -x 不要产生XML示例文件
  • -i生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。

其中 -I 命令的路径D:\gsoap_2.8.108\gsoap-2.8\gsoap\import 为前面提到的gsoap的import文件夹路径,也可以将import文件夹复制到工作目录中,则soapcpp2命令的 -I 参数为 import,例:soapcpp2.exe -C -L -I import myWebService.h

步骤5 将.h和.cpp加入到项目中
生成的文件:soapH.h、soapStub.h、soapC.cpp、soapClient.cpp
soap文件:stdsoap2.h、stdsoap2.cpp
共6个文件加入工程中。


三、使用接口,两种使用方式

在使用接口的.cpp文件中包含.nsmap文件(必须包含,否则编译不通过):

#include “XXXSoap.nsmap”

  • 方式1:若使用-i命令生成C++包装,使用方式如下:
#include <iostream>
//包含soap头文件
#include "soapH.h"
#include "soapStub.h"
#include "WeatherWSSoap.nsmap"
#include "soapWeatherWSSoapProxy.h"

using namespace std;

void main(int argc, char **argv)
{
	//WebService的请求地址
	const char* web_url = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx";

	//soap接口
	WeatherWSSoapProxy soap(SOAP_C_UTFSTRING);

	//构造输入参数
	_ns1__getWeather city_name;
	city_name.theCityCode = L"";  
	city_name.theUserID = L"";

	//输出参数
	_ns1__getWeatherResponse weather_res;
	//调用接口方法getWeather 
	int xlt = soap.getWeather(web_url, NULL, &city_name, weather_res);
	//判断接口返回值, SOAPOK表示成功
	if (xlt == SOAP_OK)
	{
		// 获取返回结果
		ns1__ArrayOfString* aos = weather_res.getWeatherResult;

		// 打印返回结果
		int count = aos->__sizestring;
		for (int i = 0; i < count; i++)
		{
			std::wstring a = (aos->string)[i];
			wcout.imbue(locale("chs"));
			wcout << a.c_str() << endl;
		}
	}

	getchar();
}
  • 方式2:待续...
//使用接口
注意事项
  • 此处天坑:在将soapH.h、soapStub.h、stdsoap.h、soapC.cpp、soapClient.cpp、stdsoap2.cpp添加到工程中时,若只将这写文件加入工程中后,大概率会出现编译不通过的情况,必须需要将对应生成的 ".nsmap" 包含到使用soap接口的cpp文件中(必须时cpp文件,否则还是编译不通过),如: #include "XXXSoap.nsmap"
  • 包含中文,c++中需要处理宽字符
  • Qt中提交接收到的数据都需要转为utf8编码格式

四、Qt使用QNetworkAccessManager的POST调用WebService,访问soap

直接使用http POST请求访问WebService服务
以天气预报WeatherWS.xml为例:

//post

待续...


五、使用QtSoap调用WebService,访问soap

待续...


四、20个免费的Webservice接口

20个免费webservice接口:http://t.csdnimg.cn/RCCRQ

天气预报Web服务,数据来源于中国气象局
Endpoint
Disco
WSDL
天气预报Web服务
Endpoint
Disco
WSDL

IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据)
Endpoint
Disco
WSDL

随机英文、数字和中文简体字 WEB 服务
Endpoint
Disco
WSDL

中国邮政编码 <-> 地址信息双向查询/搜索 WEB 服务
Endpoint
Disco
WSDL

验证码图片 WEB 服务 支持中文、字母、数字 图像和多媒体
Endpoint
Disco
WSDL

Email 电子邮件地址验证 WEB 服务
Endpoint
Disco
WSDL

中文简体字 <->繁体字转换 WEB 服务
Endpoint
Disco
WSDL

中文 <-> 英文双向翻译 WEB 服务
Endpoint
Disco
WSDL

火车时刻表 WEB 服务 (第六次提速最新列车时刻表)
Endpoint
Disco
WSDL

中国股票行情数据 WEB 服务(支持深圳和上海股市的基金、债券和股票)
Endpoint
Disco
WSDL

即时外汇汇率数据 WEB 服务
Endpoint
Disco
WSDL

腾讯QQ在线状态 WEB 服务
Endpoint
Disco
WSDL

中国电视节目预告(电视节目表) WEB 服务
Endpoint
Disco
WSDL

外汇-人民币即时报价 WEB 服务
Endpoint
Disco
WSDL

中国股票行情分时走势预览缩略图 WEB 服务
Endpoint
Disco
WSDL

国内飞机航班时刻表 WEB 服务
Endpoint
Disco
WSDL

中国开放式基金数据 WEB 服务
Endpoint
Disco
WSDL

股票行情数据 WEB 服务(支持香港、深圳、上海基金、债券和股票;支持多股票同时查询)
Endpoint
Disco
WSDL

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值