网络协议学习--SOAP协议(二)
前面一篇记录了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协议(二)相关推荐
- python网络编程学习笔记(二)
python网络编程学习(四) 多用途客户端协议 一.ftp 功能:上传下载文件,删除命名文件,建立删除目录,自动压缩,保存目录 1.代码: #coding=utf-8 '''连接远程ftp服务器,显 ...
- Python网络爬虫学习笔记(二)基本库的使用
基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...
- DICOM协议学习笔记(二)
由于工作问题,几年没涉及DICOM协议的学习了.于是下定决心沉浸式学习和分享DICOM协议. 第一篇学习dicom26种数据类型或者称为标签,这26种数据类型就相当于编程语言中的数据类型,如Int.s ...
- java的网络协议学习_协议简史:如何学习网络协议?
大学时,学到网络协议的7层模型时,老师教了大家一个顺口溜:物数网传会表应.并说这是重点,年年必考,5分的题目摆在这里,你们爱背不背. 考试的时候,果然遇到这个问题,搜索枯肠,只能想到这7个字的第一个字 ...
- TCP/IP协议学习笔记(二)
工程建立: 先建Project然后添加module和package,如图所示: 代码编写: 首先代码中会出现中文字符,所以要在代码中添加#coding utf-8,避免出现乱码. 然后明确TCP/IP ...
- 网络协议学习---IPMI协议学习
概念介绍 IPMI(Intelligent Platform Management Interface)智能平台管理接口 是一种开放标准的硬件管理接口规格,定义了嵌入式管理子系统进行通信的特定方法.I ...
- 网络协议学习——HTTP协议POST方法的格式
关于http的介绍这不赘述,主要总结下post方法里不同形式的body的提交格式. 先谈谈get与post的区别 很多人说get方法比post方法安全,我本人并不赞同,这是个片面的说法.在本地环境下, ...
- python网络爬虫学习笔记(二):爬虫基本概述
1.爬虫的基本概述 (1) 获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码.源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了. python提 ...
- python网络数据采集学习笔记(二)
今天看第二章:复杂html解析 上次的学习笔记链接:https://blog.csdn.net/Nyte2018/article/details/88713447 前两天看了慕课上的html和css入 ...
- Python 网络编程学习笔记(二)——DNS 域名解析客户端程序设计
本博文介绍如何使用 Python 网络编程,设计并实现客户端的 DNS 域名解析及缓存服务. 1 基本概念 域名系统(DNS)是一个庞大的.全球的分布式数据库,,它主要用来把主机名转换成 IP 地址, ...
最新文章
- 【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server
- 【ASP.NET Core】处理异常(上篇)
- C++ 函数的引用返回值
- 浅析django的abstract,proxy, managed
- [Java] webservice soap,wsdl 例子
- ifram嵌入网址 有跨域问题
- jqGrid表格展示简单实例
- 初探下一代SIEM核心技术发展趋势
- 【Flink】Flink + Drools 构建规则模型
- vscode 格式化json
- c语言笔记照片_C语言入门这一篇就够了-学习笔记
- 升级nodeJS中的npm版本
- 如何使用File APIs来读取文件
- Qt实现登陆界面(含代码)
- Wpf中使用OxyPlot制作图表
- SU插件|TopoShaper生成地形 免费下载及介绍(SketchUp草图大师必备)!
- phython学习记录 基础篇
- 蒙泰RIP快捷键大全
- Java键盘监听器KeyListener
- Twig中控制保留小数位数
热门文章
- 3D点云目标检测综述
- 网件刷breed_小白爱折腾 篇二:矿渣小娱C1刷breed以安装固件(适用其他路由器)...
- 计算机发展史的第五个阶段,信息技术的发展历程是怎样的? 信息技术的发展历程分五个阶段...
- 最简单的RC振荡电路图大全
- 带通滤波器中心频率计算公式中R是哪个值_手把手教系列之IIR数字滤波器设计实现...
- WiFi 深入理解:时域和频域
- 【信号处理】语音时域频域频谱图分析含Matlab源码
- 数据中台实战入门篇:双中台战略
- 怎么判断日出时间早晚_怎样判断一个地方的日出或日落时间
- 10KV变配电增容工程电力监控系统的设计与应用