gSoap访问Web Service

本文介绍了如何使用gSoap库访问Web Service,详细步骤包括下载gSoap开发包,生成客户端代理文件,解决编译错误,以及封装C++类来调用服务。通过实例展示了调用查询QQ状态服务的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gSoap访问Web Service

这里调用的是查询QQ状态的Service。http://www.webxml.com.cn/zh_cn/web_services.aspx?offset=2这里有很多免费的Service。

首先需要到下载gSoap开发包:我是从这下的http://www.cs.fsu.edu/~engelen/soapdownload.html

解压(我这里是直接放在C盘),C:\gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32目录有两个很重要的工具

接下来开始创建客户端程序:

第一个:从命令行进入C:\gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32目录


获取Web Service C++ 定义的头文件


第二步:生成客户端代理

发现有错而且没有生成任何文件:错误提示没有stlvector.h文件。需要到C:\gsoap_2.8.17\gsoap-2.8\gsoap\VisualStudio2005\wsdl2h\wsdl2h目录下把这个文件拷过来,跟QQWebService.h放在一起,然后再执行一遍刚刚的命令:

还是有错,还是少了soap12.h文件,该文件在C:\gsoap_2.8.17\gsoap-2.8\gsoap\import目录下。其实这种问题,我们可以打开QQWebService.h看看需要哪些文件。该头文件有两个语句#import "soap12.h"#import "stlvector.h"



这次成功生成代理文件。

第三步:使用生成的文件访问服务:

新建工程,把生成的文件拷过来,另外还需要C:\gsoap_2.8.17\gsoap-2.8\gsoap目录下的两个文件也拷过来。

这里我简单的封装一个类CCheckQQState;

头文件:

#include <string>

#include "soapH.h"

#include "soapqqOnlineWebServiceSoapProxy.h"

//#include "qqOnlineWebServiceSoap.nsmap"

using namespace std;

 

class CCheckQQState

{

public:

       CCheckQQState();

       ~CCheckQQState();

       string CheckState(std::string qqNumber);

protected:

private:

    soap                          m_Soap;

    _ns1__qqCheckOnline           *m_pRequest;

       _ns1__qqCheckOnlineResponse  *m_pResponse;

       qqOnlineWebServiceSoapProxy  *m_pProxy;

 

};

 

Cpp文件:

#include "CheckQQState.h"

#include "qqOnlineWebServiceSoap.nsmap"

#include "soapH.h"

 

stringCCheckQQState::CheckState( std::string qqNumber )

{

       string message ;

       if(qqNumber.length() <= 0)

       {

              message = "无效QQ";

              returnmessage;

       }

       m_pRequest->qqCode = &qqNumber;

       if(m_pProxy->qqCheckOnline(m_pRequest,m_pResponse) == SOAP_OK)

       {

              std::cout<<"调用成功"<<std::endl;

             

              string result =*(m_pResponse->qqCheckOnlineResult);

              if(strcmp(result.c_str(),string("Y").c_str())== 0)

              {

                     message = "在线";

              }

              elseif (strcmp(result.c_str(),string("N").c_str()) == 0)

              {

                     message = "离线";

              }

              elseif (strcmp(result.c_str(),string("E").c_str()) == 0)

              {

                     message = "QQ号码错误";

              }

              elseif (strcmp(result.c_str(),string("A").c_str()) == 0)

              {

                     message = " 商业用户验证失败";

              }

              elseif (strcmp(result.c_str(),string("V").c_str()) == 0)

              {

                     message = "免费用户超过数量";

              }

       }

       else

       {

              m_pProxy->soap_stream_fault(std::cerr);

       }

       returnmessage;

}

 

CCheckQQState::CCheckQQState()

{

       m_pRequest = new_ns1__qqCheckOnline;

       m_pResponse = new_ns1__qqCheckOnlineResponse;

       m_pProxy = newqqOnlineWebServiceSoapProxy(SOAP_XML_INDENT);

}

 

CCheckQQState::~CCheckQQState()

{

       deletem_pProxy;

       deletem_pRequest;

       deletem_pResponse;

}

 

#include <iostream>

 

#include "CheckQQState.h"

using namespace std;

 

int main()

{

       CCheckQQState state;

       cout<<state.CheckState("492406070")<<endl;   // QQ号随便写的;

       system("pause");

       return 0;

}

这里需要注意的是:头文件不用包含//#include "qqOnlineWebServiceSoap.nsmap",否则编译出错


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值