Web2.0时代中,C++也照样演绎着它经久不衰的生命力。很多人认为C++做网络通信开发等等太傻,虽然我不得不承认它的WebServices通信程序开发速度不如C#,C#中很多忽略的细节,在C++中全部需要自己进行定义,但是它也不是不可以做,下面跟随笔者来一起学习使用C++调用OpenAPI的方法吧。
1、 你需要的东西
其实系统中早就已经存在了SOAP的接口,XP下的是1.0版本,组件位置在C:/Program Files/Common Files/MSSoap/Binaries/MSSOAP1.dll,C是系统盘符。其实调用OpenAPI,系统里面自带的Soap1.0组件就已经足够了,微软现在官方提供3.0的Soap SDK,对我们意义不大,接口名称后面都加了”30”,最值得一提的是3.0的Soap SDK中提供的Trace Utility,这个工具可以方便我们调试。
你还需要XML解析器的支持,也就是系统里面的MSXML组件,这个想必大家都知道吧。只需要import进来,然后using namespace 就可以使用其中的接口了。
2、 了解对方的OpenAPI声明
我们这里以CSDN的OpenAPI做范例进行讲解。他们的一个讲解页面是http://community.csdn.net/openapi/openapiexplain.htm,是用C#作为主要语言,没关系,我们打开http://forum.csdn.net/OpenApi/forumapi.asmx,能看到ForumAPI提供了7个API。我们先看GetUserProfile,获取用户信息的这个API,我们能看到发送的XML的格式为如下:
POST /OpenApi/forumapi.asmx HTTP/1.1
Host: forum.csdn.net
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.csdn.net/GetUserProfile"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUserProfile xmlns="http://www.csdn.net/">
<identity>
<username>string</username>
<password>string</password>
</identity>