前面一篇记录了SOAP协议的基本概念,这一篇就讲一下c语言开发选手如何使用SOAP协议提供的丰富RPC接口。
目前来看,最傻瓜的是字节封装SOAP协议报文,利用模拟http请求,发送报文,然后接收应答,自己解析那些响应中的xml文件,拿到自己需要的结果

这种方式仅仅适合于对http模拟十分熟悉,并且擅长解析xml,且需求量很少的选手。
下面推荐一组成熟方案,可方便的将WSDL接口,转化为c语言的文件,直接包含在自己的项目中,然后直接调用里面的c语言接口,取回返回值。

使用到的软件叫gsoap,在centos下面安装十分简单

yum install gsoap-*

会安装上gsoap的开发工具和库文件,我机上安装的是:
gsoap-devel-2.8.16-12.el7.x86_64
gsoap-doc-2.8.16-12.el7.noarch
gsoap-2.8.16-12.el7.x86_64
软件提供了两个关键命令wsdl2h和soapcpp2

wsdl2h

顾名思义啊,WSDL转化为.h文件

soapcpp2

生成soap协议的c语言接口

下面简单以前一篇文章的查询手机号归属地来举个例子,首先,利用wsdl2h命令,生成头文件

wsdl2h -P -x -c -s -t typemap.dat -o phone.h  http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

然后目录下回生成phone.h这个文件,其实这个文件最终并不需要编译使用,而是用来生成c文件的中间文件

然后生成c文件

soapcpp2 -2 -C -L -c -x phone.h

此时目录下就有了如下文件

到此为止,gsoap的工作就完成了。我们来看一下最终的接口,就在soapStub.h中,原型在soapClient.c中。
以获取归属地为例
接口为

SOAP_FMAC5 int SOAP_FMAC6 soap_call___ns1__getMobileCodeInfo_(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct _ns1__getMobileCodeInfo *ns1__getMobileCodeInfo, struct _ns1__getMobileCodeInfoResponse *ns1__getMobileCodeInfoResponse)

简单协议个c语言的主函数,然后就可以调用了

#include "soapH.h"
#include "soapStub.h"
#include "MobileCodeWSSoap.nsmap"
int main()
{struct soap add_soap;soap_init(&add_soap);struct _ns1__getMobileCodeInfo ns1__getMobileCodeInfo;struct _ns1__getMobileCodeInfoResponse ns1__getMobileCodeInfoResponse;soap_set_mode(&add_soap,SOAP_C_UTFSTRING);ns1__getMobileCodeInfo.mobileCode="13683612111";ns1__getMobileCodeInfo.userID="";if(soap_call___ns1__getMobileCodeInfo_(&add_soap, NULL, NULL,&ns1__getMobileCodeInfo, &ns1__getMobileCodeInfoResponse)== SOAP_OK){printf("Response:[%s]\n", ns1__getMobileCodeInfoResponse.getMobileCodeInfoResult);}else{printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );} soap_end(&add_soap);soap_done(&add_soap);return 0;
}

这个文件与前面的c文件编译到一起,并且连接lgsoap库,即可运行

[root@localhost phone]# ./phone
Response:[13683612111:北京 北京 北京移动神州行卡]

是不是很easy?

好像这个软件还能生成服务端的代码呢,网上找到的各种支持,看起来还是很有嚼头

C/C++数据绑定工具,支持XML-RPCfrom/to JSON from/to C/C++ serialization
支持WSDL 1.1,2.0, SOAP 1.1, 1.2
支持REST HTTP(S) 1.0/1.1 operations (GET,PUT,POST etc) for XML, JSON,etc
支持MIME and MTOM 附件
支持IPv4,IPv6, TCP 和UDP
支持CGI,FastCGI
支持嵌入到Apache,IIS中发布
自带了一个Web server (multithreaded, SSL, compression)用于发布
可适用于WinCE, Palm, Symbian, VxWorks, Andriod, iPhone等小设备
…(拣主要的,其余忽略)

不过今天就不嚼了,该放假了,用肚子的地方还多着呢

回想起来,年轻时候要有这么爱学习,何愁工作不理想呢?
所以还是奉劝所有看到这些的年轻人,好好学习,为的是有好工作;
中年人也要好好学习,希望三十五岁后还有人用;

网络协议学习–SOAP协议(一)

网络协议学习--SOAP协议(二)相关推荐

  1. python网络编程学习笔记(二)

    python网络编程学习(四) 多用途客户端协议 一.ftp 功能:上传下载文件,删除命名文件,建立删除目录,自动压缩,保存目录 1.代码: #coding=utf-8 '''连接远程ftp服务器,显 ...

  2. Python网络爬虫学习笔记(二)基本库的使用

    基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...

  3. DICOM协议学习笔记(二)

    由于工作问题,几年没涉及DICOM协议的学习了.于是下定决心沉浸式学习和分享DICOM协议. 第一篇学习dicom26种数据类型或者称为标签,这26种数据类型就相当于编程语言中的数据类型,如Int.s ...

  4. java的网络协议学习_协议简史:如何学习网络协议?

    大学时,学到网络协议的7层模型时,老师教了大家一个顺口溜:物数网传会表应.并说这是重点,年年必考,5分的题目摆在这里,你们爱背不背. 考试的时候,果然遇到这个问题,搜索枯肠,只能想到这7个字的第一个字 ...

  5. TCP/IP协议学习笔记(二)

    工程建立: 先建Project然后添加module和package,如图所示: 代码编写: 首先代码中会出现中文字符,所以要在代码中添加#coding utf-8,避免出现乱码. 然后明确TCP/IP ...

  6. 网络协议学习---IPMI协议学习

    概念介绍 IPMI(Intelligent Platform Management Interface)智能平台管理接口 是一种开放标准的硬件管理接口规格,定义了嵌入式管理子系统进行通信的特定方法.I ...

  7. 网络协议学习——HTTP协议POST方法的格式

    关于http的介绍这不赘述,主要总结下post方法里不同形式的body的提交格式. 先谈谈get与post的区别 很多人说get方法比post方法安全,我本人并不赞同,这是个片面的说法.在本地环境下, ...

  8. python网络爬虫学习笔记(二):爬虫基本概述

    1.爬虫的基本概述 (1) 获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码.源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了. python提 ...

  9. python网络数据采集学习笔记(二)

    今天看第二章:复杂html解析 上次的学习笔记链接:https://blog.csdn.net/Nyte2018/article/details/88713447 前两天看了慕课上的html和css入 ...

  10. Python 网络编程学习笔记(二)——DNS 域名解析客户端程序设计

    本博文介绍如何使用 Python 网络编程,设计并实现客户端的 DNS 域名解析及缓存服务. 1 基本概念 域名系统(DNS)是一个庞大的.全球的分布式数据库,,它主要用来把主机名转换成 IP 地址, ...

最新文章

  1. 【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server
  2. 【ASP.NET Core】处理异常(上篇)
  3. C++ 函数的引用返回值
  4. 浅析django的abstract,proxy, managed
  5. [Java] webservice soap,wsdl 例子
  6. ifram嵌入网址 有跨域问题
  7. jqGrid表格展示简单实例
  8. 初探下一代SIEM核心技术发展趋势
  9. 【Flink】Flink + Drools 构建规则模型
  10. vscode 格式化json
  11. c语言笔记照片_C语言入门这一篇就够了-学习笔记
  12. 升级nodeJS中的npm版本
  13. 如何使用File APIs来读取文件
  14. Qt实现登陆界面(含代码)
  15. Wpf中使用OxyPlot制作图表
  16. SU插件|TopoShaper生成地形 免费下载及介绍(SketchUp草图大师必备)!
  17. phython学习记录 基础篇
  18. 蒙泰RIP快捷键大全
  19. Java键盘监听器KeyListener
  20. Twig中控制保留小数位数

热门文章

  1. 3D点云目标检测综述
  2. 网件刷breed_小白爱折腾 篇二:矿渣小娱C1刷breed以安装固件(适用其他路由器)...
  3. 计算机发展史的第五个阶段,信息技术的发展历程是怎样的? 信息技术的发展历程分五个阶段...
  4. 最简单的RC振荡电路图大全
  5. 带通滤波器中心频率计算公式中R是哪个值_手把手教系列之IIR数字滤波器设计实现...
  6. WiFi 深入理解:时域和频域
  7. 【信号处理】语音时域频域频谱图分析含Matlab源码
  8. 数据中台实战入门篇:双中台战略
  9. 怎么判断日出时间早晚_怎样判断一个地方的日出或日落时间
  10. 10KV变配电增容工程电力监控系统的设计与应用