用gSOAP访问WebService,QVOD搜索神器命令行版 (摘)

摘自:http://www.qingfengju.com/article.asp?id=290

1.gSOAP
简介
gSOAP 是一个跨平台的,用于开发Web Service 服务端和客户端的工具包。
下载地址为: http://gsoap2.sourceforge.net/
 
2.Web Service客户端示例
2.1 为便于测试,先用ASP.NET创建一个Web Service服务端。
主要代码如下:
[ WebService(Namespace= "namespace$http://www.qingfengju.com/")]
[ WebServiceBinding(ConformsTo= WsiProfiles.BasicProfile1_1)]
[ System.ComponentModel.ToolboxItem(false)]
public class TestService : System.Web.Services.WebService
{
    [WebMethod]
    publicstring HelloWorld()
    {
        return "Hello World";
    }
 
    [WebMethod]
    publicstring ToHex(intnum)
    {
        return "0x" +num.ToString("X8");
    }
}
 
2.2 gSOAP提供的工具生成wsdl对应的C++代码
# -o output to file
# -v verbose output
wsdl2h -v -o TestServiceSoap.h http://localhost/TestService.asmx?WSDL
 
# -L don't generate soapClientLib/soapServerLib
# -C generate client-side code only
# -I use path(s) for #import
# -x don't generate sample XML message files
soapcpp2 -L -C -ID:\Tools\gSOAP_2.8.8\gsoap\import -x TestServiceSoap.h
 
注意:
  我的gsoap 安装在D:\Tools\gSOAP_2.8.8 目录,wsdl2h.exe soapcpp2.exe
 D:\Tools\gSOAP_2.8.8\gsoap\bin\win32 目录中。
 
  SOAP1.2 生成的文件如下两个文件可以删除:
 soapTestServiceSoap12Proxy.h
 TestServiceSoap12.nsmap
 
2.3 测试代码TestClient.cpp
#include "TestServiceSoap.nsmap"
#include "soapTestServiceSoapProxy.h"
 
#include <iostream>
using namespace std;
 
int main()
{        
         TestServiceSoap test;
 
         // 调用 HelloWorld()
         _ns1__HelloWorld hello;
         _ns1__HelloWorldResponse hello_res;
         int ret=test.__ns2__HelloWorld(&hello,&hello_res);
         if(0!=ret)
         {
                   cerr<<"error:__ns2__HelloWorld()="<<ret<<endl;
                   return -1;
         }
         cout<<*hello_res.HelloWorldResult<<endl;
 
         // 调用 ToHex(num)
         _ns1__ToHex tohex;
         tohex.num=65535;
         _ns1__ToHexResponse tohex_res;
         ret=test.__ns2__ToHex(&tohex,&tohex_res);
         if(0!=ret)
         {
                   cerr<<"error:__ns2__ToHex()="<<ret<<endl;
                   return -1;
         }
         cout<<*tohex_res.ToHexResult<<endl;
 
         return 0;
}
 
用如下命令编译(stdsoap2.h,stdsoap2.cpp 需要从D:\Tools\gSOAP_2.8.8\gsoap 复制过来)
# /EHs 启用 C++ EH ( 没有 SEH 异常 )
# /EHc 外部“ C 默认为 nothrow
# /Fe<file> 命名可执行文件
cl /EHsc /FeTestClient.exe TestClient.cpp soapC.cpp soapClient.cpp stdsoap2.cpp
 
本例源码使用Visual Studio 2008 编译。
 
3.小技巧
3.1 使用gSOAP访问UTF-8编码的WebService
a. 使用自己的typemap.dat ,即:用此wsdl2h -t mytypemap.dat 生成wsdl 对应的C++ 代码
b. mytypemap.dat 中增加: xsd__string = | std::wstring| wchar_t*
c. XXXX . soap -> mode = SOAP_C_UTFSTRING ;
d. 如果要在控制台输出Unicode 字符串,需要执行:
wcout . imbue ( std :: locale ( "chs" ));
wcout << L "wstring" << endl ;
注:这里的XXXX 是自动生成的Proxy 类对象。
 
3.2 gSOAP设置代理服务器
XXXX . soap -> proxy_host = "192.168.2.72" ;
XXXX . soap -> proxy_http_version = "1.1" ;
XXXX . soap -> proxy_port = 8080 ;
 
3.3 gSOAP设置超时时间
XXXX . soap -> connect_timeout = 20 ;
XXXX . soap -> send_timeout = 20 ;
XXXX . soap -> recv_timeout = 20 ;
 
4.小工具:QVOD搜索神器命令行版
网上流传的[QVOD 搜索神器] ,这里我做了一个命令行版,也使用的是gSOAP
WebService 接口地址:http://www.cnemoney.com/searchService.dll/soap/IqvodsearchService

使用方法:QvodSearch.exe <关键字>

例如:QvodSearch.exe 许巍
得到如下结果:
qvod://21375080|580F55C1166C6F4E238A231D07E3568C7537207A|许巍_爱_01.rmvb|
qvod://17281102|353CCAD9913C779F9D5AFF13E7AD523568E2331F|许巍_故事_02.rmvb|
qvod://23589892|04A4E5573F7017C2AFDFD97F56A970858BB57407|许巍_礼物_03.rmvb|
qvod://32091361|8D1569E40D975FAB300EBE5FE5B0236AA3C11961|许巍_蓝莲花(2005北京演唱会)_live_04.rmvb|
qvod://25185336|FC23115242494CD039ABE3E0FE26000C46F647B1|许巍_旅行现场版_05.rmvb|
qvod://15547720|EDAD2D9926D0E7A9C109F342B64C434AEDCD13FE|许巍_曾经的你_LIVE_06.rmvb|
qvod://23783117|1281720532276065A53F221B5848C67E59391113|许巍_故乡_绝版青春演唱会现场版_07.rmvb|
qvod://21375080|580F55C1166C6F4E238A231D07E3568C7537207A|许巍_爱_01.rmvb|
qvod://17281102|353CCAD9913C779F9D5AFF13E7AD523568E2331F|许巍_故事_02.rmvb|
qvod://23589892|04A4E5573F7017C2AFDFD97F56A970858BB57407|许巍_礼物_03.rmvb|
qvod://32091361|8D1569E40D975FAB300EBE5FE5B0236AA3C11961|许巍_蓝莲花(2005北京演唱会)_live_04.rmvb|
qvod://25185336|FC23115242494CD039ABE3E0FE26000C46F647B1|许巍_旅行现场版_05.rmvb|
qvod://15547720|EDAD2D9926D0E7A9C109F342B64C434AEDCD13FE|许巍_曾经的你_LIVE_06.rmvb|
qvod://23783117|1281720532276065A53F221B5848C67E59391113|许巍_故乡_绝版青春演唱会现场版_07.rmvb|
qvod://444996021|4F9C0A179ABB5767B5A62C3402DDD98C06C18511|许巍2005留声十年绝版青春北京演唱会_DVD.rmvb|
搜索结果:共 15 条
 
5.使用VBScript访问WebService
如果安装了Microsoft SOAP Toolkit Version 3 ,可以用VBScript 访问WebService ,代码如下:
set soapclient = CreateObject("MSSOAP.SoapClient30")
call soapclient.mssoapinit("http://localhost/TestService.asmx?WSDL")
Wscript. Echosoapclient.HelloWorld()
Wscript. Echosoapclient.ToHex(255)
 
当然,访问WebService 最方便的方法还是用.Net 或者Java

源码:点击下载本文相关源码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值