前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络协议学习–SOAP协议(一)

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

作者头像
全栈程序员站长
发布2022-09-14 12:56:45
1.3K0
发布2022-09-14 12:56:45
举报
文章被收录于专栏:全栈程序员必看

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

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

我们需要发送的请求为

代码语言:javascript
复制
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.cn/159718.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RPC
  • http协议
  • XML格式
  • WSDL
  • 测试环境
  • POSTMAN模拟
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档