本文介绍一个gSOAP的开发实例,利用腾讯QQ在线状态 WEB 服务,服务器地址:http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx。
WSDL地址:http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl
首先,在 gsoap-2.8/gsoap/wsdl/ 下创建一个 qq 目录
-bash-3.2$ mkdir -p qq
改变当前路径为 qq
-bash-3.2$ cd qq
使用 wsdl2h 生成 qq.h ,如果希望生成纯 C 代码,需要加上 -c 参数,否则,将会生成 C++ 代码
-bash-3.2$ wsdl2h -c -o qq.h http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl 这里注意的是必须打开DNS服务器
然后,使用 soapcpp2 生成客户端存根程序和相关的头文件、资源文件,由于我们只开发客户端程序,所以可以指定 -C 参数
-bash-3.2$ soapcpp2 -C qq.h
接着,就可以利用存根程序提供的接口编写客户端程序了,过程相当简单。
qqOnline.c
#include "soapH.h"
#include "qqOnlineWebServiceSoap12.nsmap"
int main(int argc, char **argv) {
if ( argc != 2 ) {
printf("Usage: %s qq_code\n", argv[0]);
exit(-1);
}
struct soap soap;
soap_init(&soap);
struct _ns1__qqCheckOnline request;
struct _ns1__qqCheckOnlineResponse response;
request.qqCode = argv[1];
if ( soap_call___ns3__qqCheckOnline(&soap, NULL, NULL, &request, &response) == SOAP_OK ) {
char* state = NULL;
if(strcmp(response.qqCheckOnlineResult,"Y")==0) state="在线";
if(strcmp(response.qqCheckOnlineResult,"N")==0) state="不在线";
printf("你的QQ:%s 状态是:%s\n",argv[1], state);
} else {
soap_print_fault(&soap, stderr);
}
soap_destroy(&soap);
soap_end(&soap);
soap_done(&soap);
return 0;
}
编译命令是:
gcc -O2 -o qq qqOnline.c soapC.c soapClient.c ../../stdsoap2.c -I../.. -L../..
一切正常的话,就大功告成了:
-bash-3.2$ ./qq 123456
显示在线与否