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

网络协议学习–SOAP协议(一)学习了soap协议,介绍了关键的组成部分,rpc,http协议,xml,wsdl文件,以及用postman模拟soap进行测试。

大家好,又见面了,我是你们的朋友全栈君。

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协议(二)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159718.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月15日 上午11:16
下一篇 2022年7月15日 上午11:16


相关推荐

  • 什么是python的内置函数_python 内置函数

    什么是python的内置函数_python 内置函数一 什么是内置函数内置函数就是 python 给你提供的 拿来直接用的函数 截至到 python 版本 3 6 2python 一共提供了 68 个内置函数 他们就是 python 直接提供给我们的 作用域相关 locals 返回当前作用域中的名字 globals 返回全局作用域中的名字迭代器相关 range 生成数据 next 迭代器向下执行一次 内部实际使用了 next 返回迭代器的下一

    2026年3月18日
    2
  • 知识图谱构建技术一览

    知识图谱构建技术一览知识图谱构建技术一览一 什么是知识图谱二 知识图谱技术架构 一 数据获取 DataAcquisit 二 信息抽取 InformationE 1 实体抽取 EntityExtrac 命名实体识别 NameEntityRe 2 关系抽取 RelationExtr 3 属性抽取 AttributeExt

    2026年3月20日
    3
  • windows无exe

    windows无exewindows无exe加载脚本方式恶意脚本加载powershellmshta.exeCScript.exe&WScript.exeWindows原生工具加载regsvr32.exedllsctcertutil.exewinrm.vbsmsiexec.exewmic.exepubprn.vbs参考加载脚本方式利用Windows自带的解析器:PowerShell、VBScript、批处理文件和JavaScript,对应的应用程序分别为powershell.exe、cscript.exe、cmd.ex

    2022年7月15日
    34
  • python数组基本操作总结

    python数组基本操作总结一 列表 元祖 nbsp nbsp 1 元祖 nbsp nbsp nbsp nbsp nbsp nbsp 1 创建 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp tuple01 创建空元组 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp tuple01 2 nbsp 元组中只包含一个元素时 需要在元素后面添加逗号 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp tuple01 joe susan black monika nbsp nbsp nbsp nbsp nbsp nbsp 2 将元组转换为

    2026年3月19日
    2
  • centos卸载宝塔面板_centos如何关闭防火墙

    centos卸载宝塔面板_centos如何关闭防火墙centos宝塔卸载后防火墙还在的问题解决#宝塔防火墙进程名称#宝塔防火墙怎关闭#宝塔防火墙进程名称

    2025年9月22日
    7
  • 400报错有关[通俗易懂]

    400报错有关[通俗易懂]400报错是数据类型对不上,畸形,以下是经常报400的地方1.时间封装类中没有加时间注解或者使用时分秒是在新增页面使用f标签去吊.0使用<f:>2.外键name值中只加属性没加属性的属性id(注:这个是属性是外键所以需要对象.对象id)3.封装类Date包导成sql了…

    2022年5月20日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号