使用Python Zeep模块创建和发送信封

发布于 2025-01-23 19:42:36 字数 8443 浏览 5 评论 0原文

我正在尝试使用Python Zeep发送肥皂请求。

这是我的代码:

from zeep import Client

url = 'localhost:8081/ws/?wsdl'
    
def get_data():
    client = Client(url)
    itSystem = '0000000'
    MessageId = '00000000-0000-0000-0000-00000000'
    RequestMessage = 'test'
    mf = client.service.Send(itSystem, MessageId)
    print(mf)

使用print(client.wsdl.dump())显示以下内容:

Prefixes:
     xsd: http://www.w3.org/2001/XMLSchema
     ns0: urn://x-artefacts-smev-gov-ru/services/service-adapter/types/faults
     ns1: urn://x-artefacts-smev-gov-ru/services/service-adapter/types

Global elements:
     ns0:SyncFault(ns0:SyncFault)
     ns0:SystemFault(ns0:SystemFault)
     ns0:ValidationFault(ns0:ValidationFault)
     ns1:AttachmentHeaderList(AttachmentHeader: ns1:AttachmentHeaderType[])
     ns1:BusinessProcessMetadata(ns1:BusinessProcessMetadata)
     ns1:ClientMessage(ns1:ClientMessage)
     ns1:ErrorMessage(ns1:ErrorMessage)
     ns1:FindMessageQuery(ns1:FindMessageQuery)
     ns1:Message(ns1:Message)
     ns1:MessagePrimaryContent(_value_1: ANY)
     ns1:MessageQuery(ns1:MessageQuery)
     ns1:MessageResult(itSystem: xsd:string, MessageId: xsd:string)
     ns1:PersonalSignature(ns1:XMLDSigSignatureType)
     ns1:QueryMessage(ns1:QueryMessageType)
     ns1:QueryResult(ns1:AdapterMessage)
     ns1:QueryResultList(QueryResult: ns1:AdapterMessage[])
     ns1:RequestContent(ns1:RequestContentType)
     ns1:RequestMessage(ns1:RequestMessageType)
     ns1:RequestMetadata(ns1:RequestMetadataType)
     ns1:ResponseContent(ns1:ResponseContentType)
     ns1:ResponseMessage(ns1:ResponseMessageType)
     ns1:ResponseMetadata(ns1:ResponseMetadataType)
     ns1:StatusMessage(ns1:StatusMessage)
     ns1:SyncRequest(ns1:SyncRequest)
     ns1:SyncResponse(ns1:SyncResponse)
     ns1:itSystem(xsd:string)
     ns1:smevMetadata(ns1:SmevMetadata)

Global types:
     xsd:anyType
     xsd:ENTITIES
     xsd:ENTITY
     xsd:ID
     xsd:IDREF
     xsd:IDREFS
     xsd:NCName
     xsd:NMTOKEN
     xsd:NMTOKENS
     xsd:NOTATION
     xsd:Name
     xsd:QName
     xsd:anySimpleType
     xsd:anyURI
     xsd:base64Binary
     xsd:boolean
     xsd:byte
     xsd:date
     xsd:dateTime
     xsd:decimal
     xsd:double
     xsd:duration
     xsd:float
     xsd:gDay
     xsd:gMonth
     xsd:gMonthDay
     xsd:gYear
     xsd:gYearMonth
     xsd:hexBinary
     xsd:int
     xsd:integer
     xsd:language
     xsd:long
     xsd:negativeInteger
     xsd:nonNegativeInteger
     xsd:nonPositiveInteger
     xsd:normalizedString
     xsd:positiveInteger
     xsd:short
     xsd:string
     xsd:time
     xsd:token
     xsd:unsignedByte
     xsd:unsignedInt
     xsd:unsignedLong
     xsd:unsignedShort
     ns0:Fault(code: xsd:string, description: xsd:string)
     ns0:SyncFault(code: xsd:string, description: xsd:string)
     ns0:SystemFault(code: xsd:string, description: xsd:string)
     ns0:ValidationFault(code: xsd:string, description: xsd:string)
     ns1:AdapterMessage(smevMetadata: ns1:SmevMetadata, Message: ns1:Message)
     ns1:ArchiveType(File: ns1:FileType[])
     ns1:AttachmentHeaderType(Id: xsd:string, filePath: xsd:string, passportId: xsd:string, SignaturePKCS7: xsd:base64Binary, TransferMethod: xsd:string, ReusableAttachment: xsd:boolean, Archive: ns1:ArchiveType)
     ns1:BusinessProcessMetadata(_value_1: ANY[])
     ns1:ClientIdCriteria
     ns1:ClientMessage(itSystem: xsd:string, replyToQueue: xsd:string, RequestMessage: ns1:RequestMessageType, ResponseMessage: ns1:ResponseMessageType, QueryMessage: ns1:QueryMessageType)
     ns1:Content(MessagePrimaryContent: ns1:MessagePrimaryContent, PersonalSignature: ns1:XMLDSigSignatureType, AttachmentHeaderList: ns1:AttachmentHeaderList)
     ns1:CreateGroupIdentity(FRGUServiceCode: xsd:string, FRGUServiceDescription: xsd:string, FRGUServiceRecipientDescription: xsd:string)
     ns1:DynamicRoutingType(DynamicValue: xsd:string[])
     ns1:ErrorMessage(messageType: xsd:string, statusMetadata: ns1:StatusMetadataType, status: xsd:string, details: xsd:string, timestamp: xsd:dateTime, type: xsd:string, fault: ns0:Fault)
     ns1:ErrorType
     ns1:FileType(name: xsd:string, passportId: xsd:string)
     ns1:FindMessageQuery(itSystem: xsd:string, specificQuery: ns1:FindTypeCriteria)
     ns1:FindTypeCriteria(messagePeriodCriteria: ns1:MessageIntervalCriteria, messageClientIdCriteria: ns1:MessageClientIdCriteria, MessageCountToReturn: xsd:int, MessageOffset: xsd:int)
     ns1:IdentifierRoutingType(IdentifierValue: xsd:string[])
     ns1:LinkedGroupIdentity(refClientId: xsd:string, refGroupId: xsd:string)
     ns1:Message(messageType: xsd:string)
     ns1:MessageClientIdCriteria(clientId: xsd:string, clientIdCriteria: xsd:string)
     ns1:MessageIntervalCriteria(from: xsd:dateTime, to: xsd:dateTime)
     ns1:MessageQuery(itSystem: xsd:string, nodeId: xsd:string, routerExtraQueue: xsd:string, specificQuery: ns1:QueryTypeCriteria)
     ns1:Metadata(clientId: xsd:string)
     ns1:QueryMessageType(messageType: xsd:string, clientId: xsd:string, nodeId: xsd:string, queryType: xsd:string, queryFilter: xsd:string, queryRootTag: xsd:string)
     ns1:QueryTypeCriteria(messageTypeCriteria: xsd:string)
     ns1:RegistryRecordRoutingType(RecordId: xsd:int, UseGeneralRouting: xsd:boolean, DynamicRouting: ns1:DynamicRoutingType, IdentifierRouting: ns1:IdentifierRoutingType)
     ns1:RegistryRoutingType(RegistryRecordRouting: ns1:RegistryRecordRoutingType[])
     ns1:Reject(code: xsd:string, description: xsd:string)
     ns1:RejectCode
     ns1:RequestContentType(content: ns1:Content, originalContent: xsd:string)
     ns1:RequestMessageType(messageType: xsd:string, RequestMetadata: ns1:RequestMetadataType, RequestContent: ns1:RequestContentType)
     ns1:RequestMetadataType(clientId: xsd:string, linkedGroupIdentity: ns1:LinkedGroupIdentity, createGroupIdentity: ns1:CreateGroupIdentity, nodeId: xsd:string, eol: xsd:dateTime, testMessage: xsd:boolean, TransactionCode: xsd:string, BusinessProcessMetadata: ns1:BusinessProcessMetadata, RoutingInformation: ns1:RoutingInformationType)
     ns1:ResponseContentType(content: ns1:Content, rejects: ns1:Reject[], status: ns1:Status, originalContent: xsd:string)
     ns1:ResponseMessageType(messageType: xsd:string, ResponseMetadata: ns1:ResponseMetadataType, ResponseContent: ns1:ResponseContentType)
     ns1:ResponseMetadataType(clientId: xsd:string, replyToClientId: xsd:string, replyTo: xsd:string)
     ns1:RoutingInformationType(DynamicRouting: ns1:DynamicRoutingType, IdentifierRouting: ns1:IdentifierRoutingType, RegistryRouting: ns1:RegistryRoutingType)
     ns1:SmevMetadata(MessageId: xsd:string, ReferenceMessageID: xsd:string, TransactionCode: xsd:string, OriginalMessageID: xsd:string, Sender: xsd:string, Recipient: xsd:string, ReplyTo: xsd:string, SendingDate: xsd:dateTime)
     ns1:Status(code: xsd:string, description: xsd:string, parameter: {key: xsd:string, value: xsd:string}[])
     ns1:StatusMessage(messageType: xsd:string, statusMetadata: ns1:StatusMetadataType, status: xsd:string, details: xsd:string, timestamp: xsd:dateTime)
     ns1:StatusMessageCategory
     ns1:StatusMetadataType(clientId: xsd:string, originalClientId: xsd:string)
     ns1:SyncRequest(itSystem: xsd:string, RequestMessage: ns1:RequestMessageType)
     ns1:SyncResponse(smevMetadata: ns1:SmevMetadata, Message: ns1:Message)
     ns1:TransferMethodType
     ns1:TypeCriteria
     ns1:XMLDSigSignatureType(_value_1: ANY)
Bindings:
     Soap11Binding: {urn://x-artefacts-smev-gov-ru/services/service-adapter}SMEVServiceAdapterEndpointBinding

Service: SMEVServiceAdapterService
     Port: SMEVServiceAdapterEndpoint (Soap11Binding: {urn://x-artefacts-smev-gov-ru/services/service-adapter}SMEVServiceAdapterEndpointBinding)
         Operations:
            Find(itSystem: xsd:string, specificQuery: ns1:FindTypeCriteria) -> QueryResult: ns1:AdapterMessage[]
            Get(itSystem: xsd:string, nodeId: xsd:string, routerExtraQueue: xsd:string, specificQuery: ns1:QueryTypeCriteria) -> smevMetadata: ns1:SmevMetadata, Message: ns1:Message
            Send(itSystem: xsd:string, replyToQueue: xsd:string, RequestMessage: ns1:RequestMessageType, ResponseMessage: ns1:ResponseMessageType, QueryMessage: ns1:QueryMessageType) -> itSystem: xsd:string, MessageId: xsd:string

我知道我还应该放置requestMessagequeryMessage,但是我不确定我应该把它放在哪里。

I'm trying to send SOAP request with Python Zeep.

Here is my code:

from zeep import Client

url = 'localhost:8081/ws/?wsdl'
    
def get_data():
    client = Client(url)
    itSystem = '0000000'
    MessageId = '00000000-0000-0000-0000-00000000'
    RequestMessage = 'test'
    mf = client.service.Send(itSystem, MessageId)
    print(mf)

Using print(client.wsdl.dump()) shows the following:

Prefixes:
     xsd: http://www.w3.org/2001/XMLSchema
     ns0: urn://x-artefacts-smev-gov-ru/services/service-adapter/types/faults
     ns1: urn://x-artefacts-smev-gov-ru/services/service-adapter/types

Global elements:
     ns0:SyncFault(ns0:SyncFault)
     ns0:SystemFault(ns0:SystemFault)
     ns0:ValidationFault(ns0:ValidationFault)
     ns1:AttachmentHeaderList(AttachmentHeader: ns1:AttachmentHeaderType[])
     ns1:BusinessProcessMetadata(ns1:BusinessProcessMetadata)
     ns1:ClientMessage(ns1:ClientMessage)
     ns1:ErrorMessage(ns1:ErrorMessage)
     ns1:FindMessageQuery(ns1:FindMessageQuery)
     ns1:Message(ns1:Message)
     ns1:MessagePrimaryContent(_value_1: ANY)
     ns1:MessageQuery(ns1:MessageQuery)
     ns1:MessageResult(itSystem: xsd:string, MessageId: xsd:string)
     ns1:PersonalSignature(ns1:XMLDSigSignatureType)
     ns1:QueryMessage(ns1:QueryMessageType)
     ns1:QueryResult(ns1:AdapterMessage)
     ns1:QueryResultList(QueryResult: ns1:AdapterMessage[])
     ns1:RequestContent(ns1:RequestContentType)
     ns1:RequestMessage(ns1:RequestMessageType)
     ns1:RequestMetadata(ns1:RequestMetadataType)
     ns1:ResponseContent(ns1:ResponseContentType)
     ns1:ResponseMessage(ns1:ResponseMessageType)
     ns1:ResponseMetadata(ns1:ResponseMetadataType)
     ns1:StatusMessage(ns1:StatusMessage)
     ns1:SyncRequest(ns1:SyncRequest)
     ns1:SyncResponse(ns1:SyncResponse)
     ns1:itSystem(xsd:string)
     ns1:smevMetadata(ns1:SmevMetadata)

Global types:
     xsd:anyType
     xsd:ENTITIES
     xsd:ENTITY
     xsd:ID
     xsd:IDREF
     xsd:IDREFS
     xsd:NCName
     xsd:NMTOKEN
     xsd:NMTOKENS
     xsd:NOTATION
     xsd:Name
     xsd:QName
     xsd:anySimpleType
     xsd:anyURI
     xsd:base64Binary
     xsd:boolean
     xsd:byte
     xsd:date
     xsd:dateTime
     xsd:decimal
     xsd:double
     xsd:duration
     xsd:float
     xsd:gDay
     xsd:gMonth
     xsd:gMonthDay
     xsd:gYear
     xsd:gYearMonth
     xsd:hexBinary
     xsd:int
     xsd:integer
     xsd:language
     xsd:long
     xsd:negativeInteger
     xsd:nonNegativeInteger
     xsd:nonPositiveInteger
     xsd:normalizedString
     xsd:positiveInteger
     xsd:short
     xsd:string
     xsd:time
     xsd:token
     xsd:unsignedByte
     xsd:unsignedInt
     xsd:unsignedLong
     xsd:unsignedShort
     ns0:Fault(code: xsd:string, description: xsd:string)
     ns0:SyncFault(code: xsd:string, description: xsd:string)
     ns0:SystemFault(code: xsd:string, description: xsd:string)
     ns0:ValidationFault(code: xsd:string, description: xsd:string)
     ns1:AdapterMessage(smevMetadata: ns1:SmevMetadata, Message: ns1:Message)
     ns1:ArchiveType(File: ns1:FileType[])
     ns1:AttachmentHeaderType(Id: xsd:string, filePath: xsd:string, passportId: xsd:string, SignaturePKCS7: xsd:base64Binary, TransferMethod: xsd:string, ReusableAttachment: xsd:boolean, Archive: ns1:ArchiveType)
     ns1:BusinessProcessMetadata(_value_1: ANY[])
     ns1:ClientIdCriteria
     ns1:ClientMessage(itSystem: xsd:string, replyToQueue: xsd:string, RequestMessage: ns1:RequestMessageType, ResponseMessage: ns1:ResponseMessageType, QueryMessage: ns1:QueryMessageType)
     ns1:Content(MessagePrimaryContent: ns1:MessagePrimaryContent, PersonalSignature: ns1:XMLDSigSignatureType, AttachmentHeaderList: ns1:AttachmentHeaderList)
     ns1:CreateGroupIdentity(FRGUServiceCode: xsd:string, FRGUServiceDescription: xsd:string, FRGUServiceRecipientDescription: xsd:string)
     ns1:DynamicRoutingType(DynamicValue: xsd:string[])
     ns1:ErrorMessage(messageType: xsd:string, statusMetadata: ns1:StatusMetadataType, status: xsd:string, details: xsd:string, timestamp: xsd:dateTime, type: xsd:string, fault: ns0:Fault)
     ns1:ErrorType
     ns1:FileType(name: xsd:string, passportId: xsd:string)
     ns1:FindMessageQuery(itSystem: xsd:string, specificQuery: ns1:FindTypeCriteria)
     ns1:FindTypeCriteria(messagePeriodCriteria: ns1:MessageIntervalCriteria, messageClientIdCriteria: ns1:MessageClientIdCriteria, MessageCountToReturn: xsd:int, MessageOffset: xsd:int)
     ns1:IdentifierRoutingType(IdentifierValue: xsd:string[])
     ns1:LinkedGroupIdentity(refClientId: xsd:string, refGroupId: xsd:string)
     ns1:Message(messageType: xsd:string)
     ns1:MessageClientIdCriteria(clientId: xsd:string, clientIdCriteria: xsd:string)
     ns1:MessageIntervalCriteria(from: xsd:dateTime, to: xsd:dateTime)
     ns1:MessageQuery(itSystem: xsd:string, nodeId: xsd:string, routerExtraQueue: xsd:string, specificQuery: ns1:QueryTypeCriteria)
     ns1:Metadata(clientId: xsd:string)
     ns1:QueryMessageType(messageType: xsd:string, clientId: xsd:string, nodeId: xsd:string, queryType: xsd:string, queryFilter: xsd:string, queryRootTag: xsd:string)
     ns1:QueryTypeCriteria(messageTypeCriteria: xsd:string)
     ns1:RegistryRecordRoutingType(RecordId: xsd:int, UseGeneralRouting: xsd:boolean, DynamicRouting: ns1:DynamicRoutingType, IdentifierRouting: ns1:IdentifierRoutingType)
     ns1:RegistryRoutingType(RegistryRecordRouting: ns1:RegistryRecordRoutingType[])
     ns1:Reject(code: xsd:string, description: xsd:string)
     ns1:RejectCode
     ns1:RequestContentType(content: ns1:Content, originalContent: xsd:string)
     ns1:RequestMessageType(messageType: xsd:string, RequestMetadata: ns1:RequestMetadataType, RequestContent: ns1:RequestContentType)
     ns1:RequestMetadataType(clientId: xsd:string, linkedGroupIdentity: ns1:LinkedGroupIdentity, createGroupIdentity: ns1:CreateGroupIdentity, nodeId: xsd:string, eol: xsd:dateTime, testMessage: xsd:boolean, TransactionCode: xsd:string, BusinessProcessMetadata: ns1:BusinessProcessMetadata, RoutingInformation: ns1:RoutingInformationType)
     ns1:ResponseContentType(content: ns1:Content, rejects: ns1:Reject[], status: ns1:Status, originalContent: xsd:string)
     ns1:ResponseMessageType(messageType: xsd:string, ResponseMetadata: ns1:ResponseMetadataType, ResponseContent: ns1:ResponseContentType)
     ns1:ResponseMetadataType(clientId: xsd:string, replyToClientId: xsd:string, replyTo: xsd:string)
     ns1:RoutingInformationType(DynamicRouting: ns1:DynamicRoutingType, IdentifierRouting: ns1:IdentifierRoutingType, RegistryRouting: ns1:RegistryRoutingType)
     ns1:SmevMetadata(MessageId: xsd:string, ReferenceMessageID: xsd:string, TransactionCode: xsd:string, OriginalMessageID: xsd:string, Sender: xsd:string, Recipient: xsd:string, ReplyTo: xsd:string, SendingDate: xsd:dateTime)
     ns1:Status(code: xsd:string, description: xsd:string, parameter: {key: xsd:string, value: xsd:string}[])
     ns1:StatusMessage(messageType: xsd:string, statusMetadata: ns1:StatusMetadataType, status: xsd:string, details: xsd:string, timestamp: xsd:dateTime)
     ns1:StatusMessageCategory
     ns1:StatusMetadataType(clientId: xsd:string, originalClientId: xsd:string)
     ns1:SyncRequest(itSystem: xsd:string, RequestMessage: ns1:RequestMessageType)
     ns1:SyncResponse(smevMetadata: ns1:SmevMetadata, Message: ns1:Message)
     ns1:TransferMethodType
     ns1:TypeCriteria
     ns1:XMLDSigSignatureType(_value_1: ANY)
Bindings:
     Soap11Binding: {urn://x-artefacts-smev-gov-ru/services/service-adapter}SMEVServiceAdapterEndpointBinding

Service: SMEVServiceAdapterService
     Port: SMEVServiceAdapterEndpoint (Soap11Binding: {urn://x-artefacts-smev-gov-ru/services/service-adapter}SMEVServiceAdapterEndpointBinding)
         Operations:
            Find(itSystem: xsd:string, specificQuery: ns1:FindTypeCriteria) -> QueryResult: ns1:AdapterMessage[]
            Get(itSystem: xsd:string, nodeId: xsd:string, routerExtraQueue: xsd:string, specificQuery: ns1:QueryTypeCriteria) -> smevMetadata: ns1:SmevMetadata, Message: ns1:Message
            Send(itSystem: xsd:string, replyToQueue: xsd:string, RequestMessage: ns1:RequestMessageType, ResponseMessage: ns1:ResponseMessageType, QueryMessage: ns1:QueryMessageType) -> itSystem: xsd:string, MessageId: xsd:string

I know that I should also put RequestMessage, QueryMessage, but I am not sure where should I put it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蹲墙角沉默 2025-01-30 19:42:36

我看到您正在使用发送操作。该方法具有此签名:

Send(
    itSystem: xsd:string, 
    replyToQueue: xsd:string, 
    RequestMessage: ns1:RequestMessageType, 
    ResponseMessage: ns1:ResponseMessageType, 
    QueryMessage: ns1:QueryMessageType) 
-> itSystem: xsd:string, MessageId: xsd:string

您需要为这些方法参数创建对象,就像前两个参数一样。

这些参数具有类型。例如,如果您查看requestMessage,则其类型定义为:

ns1:RequestMessageType(messageType: xsd:string, RequestMetadata: ns1:RequestMetadataType, 
     RequestContent: ns1:RequestContentType)

这基本上像是接收这些参数以创建此类型对象的构造函数。创建它的方式是在Zeep文档中解释了。您要么使用client.get_type('ns1:requestMessAgeType')来构建对象,要么可以使用字典(这两者都在该文档页面上的示例中进行了说明)。

I see you are using the Send operation. That method has this signature:

Send(
    itSystem: xsd:string, 
    replyToQueue: xsd:string, 
    RequestMessage: ns1:RequestMessageType, 
    ResponseMessage: ns1:ResponseMessageType, 
    QueryMessage: ns1:QueryMessageType) 
-> itSystem: xsd:string, MessageId: xsd:string

You need to create objects for those method parameters, just like you did with the first two parameters.

Those parameters have a type. If you look at RequestMessage for example, it's type is defined as:

ns1:RequestMessageType(messageType: xsd:string, RequestMetadata: ns1:RequestMetadataType, 
     RequestContent: ns1:RequestContentType)

This basically acts like a constructor that receives those parameters in order to create an object of this type. The way you create it is explained in the Zeep documentation. You will either use client.get_type('ns1:RequestMessageType') to build objects, or you might use a dictionary (both explained in the example on that documentation page).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文