python发送soap报文_python处理SOAP API

python发送soap报文_python处理SOAP API我们常见的API一般是restful,但是有的时候也会遇到非restful的时候,对于RestfulAPI,我们很容易用python处理。SOAPAPI我们如何来处理呢?首先我们需要了解RestfulAPI和SOAPAPI架构TheRepresentationalStateTransfer(REST)架构服务通过统一资源定位器(URL)公开。这个逻辑名称将资源的标识与所接…

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

我们常见的API一般是restful, 但是有的时候也会遇到非restful的时候,对于Restful API, 我们很容易用python处理。SOAP API 我们如何来处理呢?

首先我们需要了解Restful API 和 SOAP API架构

The Representational State Transfer (REST)架构服务通过统一资源定位器(URL)公开。这个逻辑名称将资源的标识与所接受或返回的标识分开。

RESTful URL必须具有创建、请求、更新或删除的功能。这个动作序列通常被称为CRUD。要请求和检索资源,客户端将发出超文本传输协议(HTTP) GET请求。

就是我们常见的post, get, put,delete,head等动作。

SOAP 是基于 XML 的简易协议,是用在分散或分布的环境中交换信息的简单的协议,可使应用程序在 HTTP 之上进行信息交换。或者更简单地说:SOAP 是用于访问网络服务的协议。包括三个部分:封装定义了一个描述消息中包含什么内容以及如何处理它们的框架,编码规则用于表示应用程序定义的数据类型的实例,另外还有一个表示远程过程调用和应答的协定。

SOAP基于XML语言和XSD标准,其定义了一套编码规则,该规则定义如何将数据表示为消息,以及怎样通过HTTP协议来传输SOAP消息,它由以下四部分组成:SOAP信封(Envelope):定义了一个框架,该框架描述了消息中的内容是什么,包括消息的内容、发送者、接收者、处理者以及如何处理这些消息。

SOAP编码规则:它定义了一种系列化机制,用于交换应用程序所定义的数据类型的实例。

SOAP RPC表示:它定义了用于表示远程过程调用和应答协定。

SOAP绑定:它定义了一种使用底层传输协议来完成在节点间交换SOAP信封的约定。

SOAP消息基本上是从发送端到接收端的单向传输,它们常常结合起来执行类似于请求/应答的模式。不需要吧SOAP消息绑定到特定的协议,SOAP可以运行在任何其他传输协议(HTTP、SMTP、FTP等)上。另外,SOAP提供了标准的RPC方法来调用Web Service以请求/响应模式运行。

区别:

restful的优点:可以看作是http协议的一种直接应用,默认是基于json作为传输格式,使用简单返回格式一般为json_decode($code,$msg,$data),是对api接口的一种约定,方便调用。

restful的缺点:安全性比较低,没有得到一些语言的支持。

SOAP:是一种数据交换协议规范,是一种轻量的、简单的、基于XML的协议的规范。

优点:易用,灵活,跨语言,跨平台

restful API和SOAP,二者各有自己的使用场景。如果创建的分布式服务要求较好的安全性,对于传输等底层实现要求较强的可定制性,可以考虑SOAP;如果要求设计实现简单,一般来说安全性要求不高可以考虑REST。这只是一般情况,但偏于面向资源的服务使用REST有天然的优势。

好了,说了这么多,我们常见的WDSL格式,就是一种SOAP API格式。

一般我们用WCFstorm 来发这种svc格式的请求。我们来用WCF来发,用Fiddler来抓抓看,是什么样子。

但是我们如何来自动化操作这种请求呢?

祭出我们的大杀器,zeep.

zeep是什么呢?就是python中用来解析SOAP格式的一个插件。具体怎么用,可以去官网看看。

import zeep, 然后用client发一下就可以了。

例如:

import zeep

host = “xx”

member_id = “1145”

wsdl = ‘http://{}.e.com/services/ecplatform/StudyPlanService.svc?wsdl’.format(host)

# client = zeep.Client(wsdl=wsdl, wsse=UsernameToken(‘SalesforceSmartUser’, ‘SalesforceSmartPwd’))

client = zeep.Client(wsdl=wsdl)

def join_group():

client.service.JoinGroup(studentId=member_id)

def generate_monthly_report():

client.service.UpdateMonthlyKeywordCount(studentId=member_id, cultureCode=’zh-CN’,

year=year,

month=month, forceSendNotification=True)

def generate_weekly_study_goal_reminder():

client.service.SendWeeklyStudyGoalReminder(studentId=member_id, cultureCode=’zh-CN’, forceSend=True)

def generate_this_week_study_status():

client.service.SendThisWeekStudyStatus(studentId=member_id, cultureCode=’zh-CN’, forceSend=True)

关键是参数如何填写,这块我弄了好久,然后在同事的帮助下搞定的。

就是调用client中service,然后调用接口的名字。

参数就是parameters中的值。

一般这种请求,发出去没有返回值。

好了,大功告成,如果你有什么问题,请私信我。

更多精彩,请关注微信公众号:python爱好部落

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ZTE E700 自用感受及软件推荐

    ZTE E700 自用感受及软件推荐ZTEE700自用感受及软件推荐声明声明:此帖是转的  前两天看到移动08年新出的承诺话费换手机业务,换了个折扣最高的ZTEE700,首先声明我用的手机并不是很多,所以说错了希望大家见谅。这个机器我非常满意,非常好用!质量没得说,我从手里掉到水泥地上机器翻了3个跟头拿起来一点问题都没有。内置功能很强大,不过扩展功能则比较残废,好在机器本身的功能就能满足90%以上人的需求了,游戏…

    2022年7月11日
    12
  • 解决java:找不到符号办法

    解决java:找不到符号办法有时候遇到自己的接口或者类明明在项目中,编译的时候就出现找不到符号,提示找不到就说明项目没有识别到,先检查下pom.xml文件没问题,移除moudle再重新导入,ReimportAllMaven.有问题的欢迎评论一起解决。…

    2022年7月8日
    27
  • 免费的UML工具

    免费的UML工具VisualParadigmCommunityEdition是自2004年以来推出的,旨在提供免费的UML软件,用于非商业目的,支持在UML建模方面迈出第一步的用户,以及需要免费的跨平台UML建模软件的用户个人使用,如在学生项目中使用UML。UML建模工具免费用于各种非商业目的。支持13个UML2.x图和ERD图。VisualParadigmCommFreeUMLToolforPersonalandnon-Commercialpurposes,downloadnow!

    2022年7月12日
    18
  • 新出台的治理iMessage垃圾短信的规则

    新出台的治理iMessage垃圾短信的规则

    2022年1月21日
    62
  • matlab最优化问题的函数(fminbnd),fmincon,globalsearch,multistart(全局局部最优)

    matlab最优化问题的函数(fminbnd),fmincon,globalsearch,multistart(全局局部最优)在讨论优化问题时我们先来讨论全局最优和局部最优全局最优:问题所有的可能解中效果最好的解。局部最优:问题的部分可能解中效果最好的解。一个针对的全局,一个针对的部分。就像我们设初值一样,设置了以后函数开始迭代变化。这时可能出现两种现象①迭代到一个解,该解距离初值较近,此处该值很有可能是局部最优。②迭代到一个解,该解距离初值相对较远,此处该值很大可能是全局最优,当然也可能是局部最优。上…

    2022年5月8日
    305
  • opencv widthstep 理解

    opencv widthstep 理解widthstep是指图像每行所占的字节数,主要要和width区别,width是指每行所含的像素个数,但是一个像素也可能占一个字节,也可能占三个字节或者四个,多个等.imagedata是指向存储图像像素值数组的指针,内容是这个数组的首地址,pt.y指的是像素点的行坐标,所以Img->imageData+Img->widthStep*pt.y便是该像素点所在行的首地址,然后再加上该像

    2022年6月11日
    29

发表回复

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

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