SOAP协议也是在学习onvif协议才学习到的知识点,感觉这个协议有点内容,所以单独拆分出来,介绍学习一下,都是新手,如果哪里讲的不对,请告诉我,反正我也不改。

简单来说,SOAP协议的组成,就是下面这个公式
SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式

首先它是一种RPC接口,那么第一个知识点来了,什么是RPC

RPC

RPC:(Remote Procedure Call)远程调用。与之类似的还有一种叫LPC(Local Procedure Call)本地调用,二者的区别就在于执行单元,一个在本地,一个在远端。

拿C语言的函数来举例
本地调用:通常,在我们的代码中调用一个函数,这个函数要么是系统API,要么是我们自己实现的本地代码,一起编译,一起发布,也在同一个进程中一起执行,这就是本地调用!
例如为了计算1+1,我们开发了如下程序

,其中calc_plus函数,在main函数之前实现,或者在其他库中实现,被我们调用,那么执行main的时候,我们就直接访问calc_plus函数的地址,直接得到运算结果。

远程调用:被调用方法的具体实现不在同一个进程,而是在别进程,甚至别的电脑上。RPC一个重要思想就是,使远程调用看起来像本地调用一样,调用者无需知道被调用接口具体在哪台机器上执行。

还是计算1+1我们发现计算1+1太占用CPU资源了,公司只有一台这样的电脑,那么我们就将这台电脑作为一台服务器,提供calc_plus这个功能,如果别人想计算怎么办,那就通知这台电脑,我调用calc_plus函数,传入参数1和参数1。

这样就皆大欢喜了,我们都能尽情计算1+1了。

那么接着就会遇到问题,这个链接怎么建立,用什么协议传输呢,SOAP协议采用了HTTP协议,因为大部分服务器,都支持这种简单的服务,环境简单,配置简单,工具成熟……

http协议

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP),它是基于请求-响应的模式协议,客户端发出请求,服务器端给出响应并返回请求内容。

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

方法 含义
GET 向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问
HEAD 与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)
POST 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有
PUT 向指定资源位置上传其最新内容
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 回显服务器收到的请求,主要用于测试或诊断
OPTIONS 这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

方法这么多,其实常用的也就是GET和POST,SOAP协议使用到的也就是GET和POST两种方式。

XML格式

http只是传输的最外层协议,内部如何制定调用哪个端口,如何传递参数呢?SOAP协议采用了好看不中用的xml。尤其是搞c语言的,恨不得将xml打入18层冷宫,原因就是这个东西格式复杂,还需要额外的解析库来参与。

不过这个SOAP对xml的钟情,让我不得不介绍一下这个东西,还好soap对xml的需求不太深入,只是简单的用它来定义传输的内容。
这是一段SOAP的报文请求

XML里面定义了调用的函数,以及传入的两个参数,最终将这一段报文发送给服务端,就可以得到天气预报结果了

WSDL

此处再介绍一个概念,WSDL(Web Services Description Language,网络服务描述语言),因为前面我们把RPC的功能说清了,远程过程调用的是C函数,那么我们就需要知道都有那些C函数,需要传输那些参数,名字都是什么?这让我们想起了熟悉的头文件,没错,WSDL就是SOAP的头文件,是一种xml格式定义的,介绍SOAP协议结构的文件。简单来做个对比


意思就是,我们知道了服务器地址,再拿到这个WSDL文件,就知道怎么调用服务器里面的函数,传递哪些参数,收获那些结果。

测试环境

在这里推荐一个webservice的提供网站,http://www.webxml.com.cn/zh_cn/web_services.aspx
啥?webservice,webservice中就包含了SOAP,就是用web提供功能服务,这里暂不深入,只需要知道,websevice是RPC的一种,SOAP是webservice的一种即可。
这个测试网站,提供了一个天气预报的服务

那么这里我们访问第一个web服务,然后再访问

这里就可以看到一个完整的soap协议的例子

POSTMAN模拟

说简单点,SOAP就是通过HTTP协议调用XML里面的函数,那么自然可以通过postman模拟http请求,来简单测试一下某些WSDL,就直接用前面的网站提供的手机号归属地查询来试一下吧
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo

我们需要发送的请求为

POST /WebServices/MobileCodeWS.asmx HTTP/1.1
Host: ws.webxml.com.cn
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><getMobileCodeInfo xmlns="http://WebXml.com.cn/"><mobileCode>string</mobileCode><userID>string</userID></getMobileCodeInfo></soap12:Body>
</soap12:Envelope>

postman中header主要修改点在于下面两点

body部分用raw方式发送

然后可以得到结果了

最后要鸣谢一位专家及其作品,这个介绍IPC摄像头的文章,如果要学习,必须拜读一下。
许振坪
https://blog.csdn.net/benkaoya/article/details/72424335

明天就是国庆节了,提前祝大家国庆快乐,坚守好最后一班岗

其实心里想的
网络协议学习–SOAP协议(二)

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

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

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

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

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

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

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

  4. 对于SOAP协议的全面介绍

    学习了一段时间的网络协议 , 相信大家已经对一些常规的网络协议有所了解了.那么这里我们主要介绍一下SOAP协议的内容.SOAP协议:简单对象访问协议(SOAP:Simple Object Access ...

  5. 6 使用soap客户端_网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议

    上一节我们了解 RPC 的经典模型和设计要点,并用最早期的 ONC RPC 为例子,详述了具体的实现.而时代在进步,ONC RPC 逐渐因为各种问题被替代,SOAP 协议就是替代者之一. ONC RP ...

  6. 网络协议学习笔记 · 22

    IPv6 · 流媒体 · 即时通讯 · 缓存 · 网络爬虫 VPN 作用 VPN与代理的区别 实现原理(隧道协议) 网络爬虫 简易实例 robots.txt 无线网络 缓存(Cache) 响应头 请求 ...

  7. 网络协议学习笔记-IGMP协议

     网络协议学习笔记-IGMP协议 http://hi.baidu.com/clxye/item/3db870336d86c0c11a969614 IGMP协议(Internet Group Man ...

  8. 网络协议学习之Ethernet II协议(二层)

    网络协议学习之Ethernet II协议 简介 一.协议 1.协议结构 二.抓包分析 总结 简介 Ethernet II协议位于五层OSI模型中的第二层,属于链路层的协议. 一.协议 1.协议结构 前 ...

  9. Python网络编程——HTTP协议学习笔记

    HTTP协议学习笔记 HTTP协议概述 一.HTTP协议的介绍 HTTP协议的全称是(HyperText Transfer Protocol),翻译过来就是超文本传输协议. 超文本是超级文本的缩写,是 ...

  10. 网络爬虫学习3 - Requests库的七个主要方法、安全性问题与异常处理、反爬虫和Robots协议

    网络爬虫MOOC学习打卡 - 第三天 文章目录 网络爬虫MOOC学习打卡 - 第三天 一.Requests库主要方法解析 0.Requests库的七个主要方法 1.request()方法request ...

最新文章

  1. nodejs文件服务器断点续传,基于Nodejs的大文件上传之断点续传
  2. poj-青蛙的约会(扩展欧几里得)nyoj-小柯的约会
  3. html5页面被键盘挡住,HTML5 虚拟键盘出现挡住输入框怎么办
  4. require(),include(),require_once()和include_once()区别
  5. [UVA 10891] Game of Sum
  6. java的流传输的进度条_JAVA程序设计(17)----- 制作文件拷贝软件 进程 输入流输出流 NIO 进度条 底层拷贝 多线程...
  7. 人月神话读感/摘抄 四
  8. 密码学加解密实训(墨者学院摩斯密码第2题)
  9. 如何计算某一天是星期几?—— 蔡勒(Zeller)公式
  10. 新书推荐——Linux系统管理与服务器配置
  11. ex10_10MyInteger类
  12. 芳菲也迷人,玩转北京大周边
  13. Caffe2 - (二十四) Detectron 之 utils 函数(2)
  14. 马悦凌:从初级护士到“民间奇医”[2]
  15. Flink(60):Flink中通用ModelUtil工具类
  16. 如何使用 dlv 结合 Goland 进行程序 debug 调试
  17. 如何打造又快又好的PPT(一)
  18. 区块链资产投资指南及技巧
  19. 长沙学院计算机专业老师李彬,长沙学院2007-2008模具CADCAM_04机本教案【荐】.doc...
  20. 快速掌握python3语法_【Python】Python3基本语法入门学习

热门文章

  1. C# 读取oracle 中文乱码的解决方案
  2. 推荐系统的因果关系感知邻域方法:Causality-Aware Neighborhood Methods for Recommender Systems(ECIR,2021)
  3. 计算机维修管理平台软件,美萍电脑行业管理软件(电脑业务管理系统、电脑维修管理系统、组装业务、电脑装机管理软件)--管理软件,美萍是专家!...
  4. blender初学实用快捷键
  5. 如何把真实地形数据DEM导入world machine制作地形
  6. 山地车中轴进水表现_你一定不知道的自行车中轴知识
  7. c语言计算机二级涉及内容,计算机二级(C语言)都考哪些内容?
  8. 鸿蒙系统分布式操作,如何通俗解释鸿蒙系统分布式操作
  9. 计算机网络与信息安全公务员,计算机网络技术专业考公务员有些职位?
  10. 怒了,以后有文件保存到网上