2010年,我写过一些使用gSOAP开发SOAP应用程序的系列文章,共8篇,详情请参考以前的博文:
(1) 股票信息客户端程序
(2) 股票信息服务端程序
(3) iconv解决中文乱码问题
(4) iconv解决中文乱码问题(续)
(5) libxml2解析SOAP响应消息
(6) 在HP-UX下编译gSOAP-2.7.17
(7) 基于HTTPS的基本认证(Basic Authentication)
(8) 自定义header实现用户名令牌认证(Usernametoken Authentication)
使用gSOAP,基本上可以实现傻瓜相机式的快速开发。不过,大部分操作系统,即使是Linux,都没有自带gSOAP,要使用它就必须首先下载、编译、安装。另外,虽然gSOAP本身是跨平台的,但是它必须基于一系列GNU的组件,如果不满足条件的话,恭喜你啦,可以看看我在HP-UX下使用gSOAP有多么的麻烦。再次,gSOAP封装得太多,使用起来太简单,可能也不能满足部分人士(比如我这种人啦)学习的需要。
那么,Linux下有没有免安装的、更容易实现跨平台的、比gSOAP轻量级的、能够进一步学习和理解HTTP、SOAP的开发工具呢?
答案是肯定的。curl就是RHEL Linux自带的、功能强大的客户端工具,它支持许多协议:HTTP、FTP、TELNET、SMTP、POP3等等,基于HTTP和HTTPS的SOAP更是不在话下了。更妙的是,它同时还提供一套编程接口libcurl,可以把curl命令的各项功能嵌入到你自己的C程序中。所以,除了SOAP客户端,使用libcurl,还可以开发出下载工具和邮件客户端,这是gSOAP无法相比的。
由于SOAP和XML的天然联系,最好使用同样是Linux自带的libxml2来生成SOAP请求和解析SOAP响应。即使有的Unix系统、甚至Windows系统,没有libcurl或者libxml2,下载源代码编译安装基本上也不会遇到什么麻烦,比编译gSOAP的过程轻松多了。Windows下编译libxml2的过程及可能遇到的问题,请参考以前的博文:http://blog.csdn.net/yui/archive/2011/01/02/6112622.aspx
此外,我们还需要soapUI进行辅助开发,我觉得soapUI最实用的功能是能够测试一个SOAP连接是否成功,并且一字不漏地呈现它的请求格式,包括其HTTP头信息。这样,我们就可以根据一个在soapUI里测试成功的范例,依样画葫芦,使用libcurl把它重现出来。soapUI的官方网站是:http://www.soapui.org/
那么,libcurl+libxml2是否就可以取代gSOAP呢?当然也不是,首先,libcurl只是一个客户端工具,开发不了服务端程序,其次,使用libxml2生成SOAP请求和解析SOAP响应,在大部分场合都比调用gSOAP的接口麻烦,这个也是必须承认的事实。仅仅进行SOAP客户端开发的话,如果是在GNU Linux下,还是推荐gSOAP。libcurl+libxml2方案的亮点是:支持多种协议、有利于跨平台。总之,多备一把刀,总是好的,免得杀鸡的时候被迫用了把牛刀,砍树的时候又被迫用了把小刀。
以下是基于HTTP的SOAP客户端程序的例子,用了http://www.webxml.com.cn/zh_cn/web_services.aspx
提供的Web Service,应该很容易看懂。中文乱码的问题就不在这里多说了,上面gSOAP的系列文章有解释。
程序需要读取stock.xml作为SOAP请求模板,也就是从soapUI测试过程中抓取的内容:
如果需要开发基于HTTPS的SOAP客户端的话,首先要在libcurl添加openssl支持,我的前一篇博文也有介绍:http://blog.csdn.net/yui/archive/2011/01/31/6170889.aspx
使用的方法基本与前面的程序一样,不过可能需要多加一句:
另外,如果在Code::Blocks下,编译的关键是库文件链接次序,请见上一篇博文最后的图。
分享到:
相关推荐
使用VC6编译-Curl和LibCurl+ssl+ssh2+zlib libcurl是一个跨平台的开源网络协议库,支持http, https, rtsp等多种协议 。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,...
实测可用LibCurl和OpenSSL动态开发库,内含x86 & x64版本lib及dll,亲测win10系统可用。 作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能...
自用,不保证东西全,c++ libcurl+ws2_32+winmm三个.lib文件
libcurl+openssl-64位动态库(包含MD版本和MDd版本)libcurl+openssl-64位动态库(保护MD版本和MDd版本)
为了写正则表达式方便,分别用C++版本(MFC+libcurl+boost)以及python(re+wxWidget库)版本两个解析器,因为这两种解析器对于正则解析稍微有区别,例如python对于范围默认为最大,boost就默认为最小。版本提供了网页...
MFC专用 请选择 在静态库中使用MFC,多线程/Mt 并加入宏STATIC_LIBCURL 否则可能报错
libcurl (x86 /x64)编译环境支持https,http,ftp;里面包含openssl、zlib编译环境。
libcurl with openssl,ios版本,支持模拟器以及真机。
libcurl/7.78.0 zlib/1.2.7.3 编译环境vc11-x86-static
工程是VS2010,我的电脑是win7 64位, 这里我使用的curl版本是这里面使用的libcurl版本是7.32.0,使用的openssl版本是1.0.1f,通过开启线程下载文件,在主函数里面添加任务,就可添加下载任务
gtK Cairo LibCurl LibXML 解析实例gtK Cairo LibCurl LibXML 解析实例gtK Cairo LibCurl LibXML 解析实例gtK Cairo LibCurl LibXML 解析实例gtK Cairo LibCurl LibXML 解析实例gtK Cairo LibCurl LibXML 解析实例
mac命令行下全自动编译libcurl.a库(support SSL)供ios开发用!zip包含ios-build-libcurl.sh、ios-build-openSSL.sh、Readme.txt三个文件!由于缺积分,所以资源分要的比较高,分多的就施舍点、分不够的又急需用的...
对openssl和curl在windows下编译的静态库,支持https的使用。也可以上官网下载原版的自己手动编译。
如题,mac终端下自动编译curl+ssl支持的.a库的脚本文件,供iOS开发使用,生成i386,x86_64,armv7,armv7s,arm64五大CPU架构的库文件(内含编译好的,可以直接使用),消息介绍看zip中的说明文件!(2019-11-16整理)分不够的mail...
如题,mac终端下自动编译curl+ssl支持的.a库的脚本文件,供iOS开发使用,生成i386,x86_64,armv7,armv7s,arm64五大CPU架构的库文件(内含编译好的,可以直接使用),消息介绍看zip中的说明文件!(2015-01-14整理)分不够的mail...
GTK Cairo LibCurl LibXML 解析实例
x86 libcurl编译好的版本VS可用,里面包含curl7.74,openssl,zlib1.2.11都是最新版本 curl version: libcurl/7.74.0-DEV OpenSSL/1.1.1d (Schannel) zlib/1.2.11
libcurl 作为ftp客户端上传文件,VS2008 QT4.7
libcurl 以JSON模式post。VS2013.代码齐全。里面有JSON库已经libcurl的库
编译环境win10_64,vs2017。libcurl添加了对openssl和zlib的...libcurl的版本是7.61.1,openssl的版本是1.1.1(Github9月11日打包的那版),zlib的版本是1.2.11。压缩包里面包含了x64和x86版本,静态链接库和动态链接库。