python suds_Python SUDS错误

python suds_Python SUDS错误我正在尝试将 PHP 脚本转换为 python 但不能在我的生活中找出为什么以下不起作用 从 SOAP 服务查询返回的结果 Suds https fedorahosted org suds version 0 4GAbuild R699 Service ExternalQuer tns http asic

我正在尝试将PHP脚本转换为python,但不能在我的生活中找出为什么以下不起作用.

从SOAP服务查询返回的结果:

Suds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-

Service ( ExternalQueryNameAvailabilityService ) tns=”http://asic.gov.au/wsdl/name/availability/external”

Prefixes (6)

ns0 = “http://docs.oasis-open.org/wss/2004/01/oasis–wss-wssecurity-utility-1.0.xsd”

ns1 = “http://www.w3.org/2005/05/xmlmime”

ns2 = “uri:business.document.header.types.asic.gov.au”

ns3 = “uri:external.query.name.availability.asic.gov.au”

ns4 = “uri:fss.types.asic.gov.au”

ns5 = “uri:types.asic.gov.au”

Ports (1):

(ExternalQueryNameAvailabilityPort)

Methods (1):

externalQueryNameAvailability(ns2:businessDocumentHeaderType businessDocumentHeader, ns3:requestDataType businessDocumentBody, )

Types (113):

ns0:AttributedDateTime

ns0:AttributedURI

ns0:TimestampType

ns5:abnApplicationReferenceNumberType

ns5:abnType

ns5:accountIdentifierType

ns5:actionType

ns5:addressType

ns5:addressTypeType

ns5:agentNameType

ns5:agentType

ns5:amountSignedType

ns5:amountType

ns5:applicationStatusType

ns4:ascotDocumentNoType

ns5:asicNumericIdType

ns4:asicPaymentDetailsType

ns5:asicSignatoryType

ns2:attachmentType

ns2:attachmentsType

ns1:base64Binary

ns5:birthDetailsType

ns5:bnReferenceNumberType

ns5:browserIdentifierType

ns2:businessDocumentHeaderType

ns2:businessDocumentRequestHeaderType

ns5:businessNameIdentifierType

ns5:codeType

ns5:creditCardType

ns4:customerReferenceNumberType

ns4:debtorType

ns5:descriptionType

ns5:distinguishedNameType

ns5:distinguishedWordType

ns5:documentIdentifierType

ns5:documentNoType

ns5:emailType

ns5:entityType

ns5:exceptionListType

ns5:exceptionType

ns4:feeType

ns4:feeWithAmountType

ns4:feesType

ns5:flagType

ns4:fssAccountType

ns4:fssCustomerType

ns4:fssItemType

ns4:fssSimpleAccountType

ns4:fssTransactionType

ns2:genericResultType

ns1:hexBinary

ns5:inboxIdentifierType

ns5:intervalStatusType

ns4:invoiceType

ns5:itemSearchScopeType

ns5:itemSummaryType

ns5:itemTypeType

ns5:keyType

ns4:ledgerType

ns5:lodgementIdentifierType

ns2:messageEventType

ns2:messageEventsType

ns5:messageIdentifierType

ns2:messageTimestampType

ns2:messageTimestampsType

ns5:nameAvailabilityType

ns5:nameResultType

ns5:nameResultWithObjectionsType

ns5:nameType

ns5:nniNameType

ns5:nniNumberType

ns5:objectionType

ns5:organisationIdentifierType

ns5:organisationNamePlusIdType

ns5:originatingChannelType

ns5:originatingServiceType

ns5:outboundItemIdentifierType

ns4:paymentDetailsType

ns4:paymentMethodType

ns5:paymentType

ns5:personNameBirthType

ns5:personNameType

ns5:personNameWithRoleType

ns4:priceType

ns3:queryNameAvailabilityReplyType

ns3:queryNameAvailabilityRequestType

ns5:realmIdentifierType

ns5:realmQualifierType

ns4:receiptType

ns5:referenceNoType

ns5:rejectedType

ns3:replyDataType

ns5:replyType

ns3:requestDataType

ns5:requestFailedType

ns5:requestRejectedType

ns5:requestType

ns5:resultType

ns5:signatoryType

ns5:soapSoftwareIdentifierType

ns2:softwareInformationType

ns5:standardHeaderType

ns5:standardMessageHeaderType

ns5:stateTerritoryCodeType

ns5:statusType

ns5:streetType

ns4:suffixType

ns0:tTimestampFault

ns5:telephoneNumberType

ns5:textType

ns4:transactionType

ns4:transactionsType

ns5:trueType

尝试执行以下操作时:

con = connect(‘ExternalQueryNameAvailabilityPort’, test, {‘Content-Type’: ‘application/soap+xml’})

q_header = con.factory.create(‘ns2:businessDocumentHeaderType’)

q_header.messageType = ‘queryNameAvailability’

q_header.messageVersion = ‘2’

q_header.messageReferenceNumber = ‘100’

q_header.senderType = ‘REGA’

q_header.senderId = ‘192’

q_body = con.factory.create(‘ns3:businessDocumentBody’)

q_body.proposedName = ‘Xtramedia.net PTY LTD’

q_body.companyNameAvailabilityCheck = ‘true’

q_body.bnNameAvailabilityCheck = ‘true’

result = con.service.externalQueryNameAvailability(q_header, q_body)

我收到以下错误:

DEBUG:suds.client:http failed:

S:Receiver

org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element ‘ns1:businessDocumentHeader’. One of ‘{“uri:business.document.header.types.asic.gov.au”:businessDocumentHeader}’ is expected

任何想法为什么会抱怨这个元素? – 我已经尝试删除元素声明的“nsX”部分,但同样的事情.

更新:以下是PHP脚本生成并成功的内容;

queryNameAvailability

1

2

192

REGA

TEST

true

有人有任何想法吗?

更新2:我必须安装最新版本的SUDS才能实现这一目标. – 非常感谢所有人的回答.

干杯,

解决方法:

更新(在PHP示例输出之后)

目前还不清楚为什么suds使用{uri:external.query.name.availability.asic.gov.au}

而不是{uri:business.document.header.types.asic.gov.au}用于businessDocumentHeader元素.

修复它的快速而肮脏的方法是使用suds.plugin例如:

from suds.plugin import MessagePlugin

class NsHeaderPlugin(MessagePlugin):

def sending(self, context):

context.envelope = context.envelope.replace(‘ns1:businessDocumentHeader’,

‘ns0:businessDocumentHeader’)

要么

class NsHeaderPlugin(MessagePlugin):

def marshalled(self, context):

hdr = context.envelope.childAtPath(‘Body/request/businessDocumentHeader’)

hdr.setPrefix(‘hdr’, ‘uri:business.document.header.types.asic.gov.au’)

第二个参数应该是ns3:requestDataType,而不是您指定的ns3:businessDocumentBody.

一般代码流程:

from suds.client import Client # pip install suds

#XXX: change envelope namespace

from suds.bindings import binding

binding.envns = (binding.envns[0], ‘http://www.w3.org/2003/05/soap-envelope’)

del binding

# change content type

headers = {‘Content-Type’: ‘application/soap+xml; charset=”UTF-8″‘}

client = Client(wsdl_url, headers=headers, plugins=[NsHeaderPlugin()])

header = client.factory.create(‘{uri:business.document.header.types.asic.gov.au}’

‘businessDocumentHeaderType’)

header.messageType = “queryNameAvailability”

header.messageReferenceNumber = 1

header.messageVersion = 2

header.senderId = 192

header.senderType = “REGA”

body = client.factory.create(‘{uri:external.query.name.availability.asic.gov.au}’

‘requestDataType’)

body.proposedName = ‘TEST’

body.bnNameAvailabilityCheck = ‘true’

# make the call

result = client.service.externalQueryNameAvailability(header, body)

print result # for debugging, to find out what attributes are available

我没有看到未定义的命名空间,因此在您的情况下似乎不需要ImportDoctor.但是,例如,如果使用了xs:string类型,并且未提及“http://schemas.xmlsoap.org/soap/encoding/”,那么您可以修复wsdl架构:

from suds.xsd.doctor import Import, ImportDoctor

imp = Import(‘http://schemas.xmlsoap.org/soap/encoding/’)

# add namespaces where the type is used (call `imp.filter.add` multiple times)

imp.filter.add(“http://asic.gov.au/wsdl/name/availability/external”)

doctor = ImportDoctor(imp)

client = Client(wsdl_url, doctor=doctor)

标签:python,suds

来源: https://codeday.me/bug/20190704/1377144.html

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

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

(0)
上一篇 2026年3月20日 上午10:36
下一篇 2026年3月20日 上午10:36


相关推荐

发表回复

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

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