gSoap访问Web Service

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",否则编译出错


gSoap访问Web Service,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。