问题标签 [zeep]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
592 浏览

python-3.x - 如果后续 SOAP 请求中不需要,则过滤掉递归序列化 zeep dict 中的所有键

我正在构建一个zeep基于 - 的 Python SOAP 客户端。

在我的数据模型设计中,我使用 zeep 的serialize_object辅助函数存储序列化响应字典以进行get方法调用。我打算允许对数据模型字典中的各种键的 python 对象进行数据模型操作,然后能够将数据模型用作后续updateSOAP 调用的参数。

问题是响应中的返回值与 WSDL 的定义get不匹配。update因此,我想递归地“区分”这两个字典,并删除任何不符合add定义要求的键。

但是,我不确定如何使用 object factory 提取 zeep 对象的递归 dict 表示Client.get_type()

根据 zeep 的 wsdl 转储,我的 wsdl 包含这个:

ns0:AddPhoneReq(phone: ns0:XPhone, sequence: xsd:unsignedLong)

XPhone是:

ns0:XPhone(name: ns0:UniqueString128, description: ns0:String128, product: , class: , protocol: , protocolSide: , callingSearchSpaceName: ns0:XFkType, devicePoolName: ns0:XFkType, commonDeviceConfigName: ns0:XFkType, commonPhoneConfigName: ns0:XFkType, networkLocation: , locationName: ns0:XFkType, mediaResourceListName: ns0:XFkType, networkHoldMohAudioSourceId: , userHoldMohAudioSourceId: , automatedAlternateRoutingCssName: ns0:XFkType, aarNeighborhoodName: ns0:XFkType, loadInformation: ns0:XLoadInformation, vendorConfig: ns0:XVendorConfig, versionStamp: ns0:String128, traceFlag: ns0:boolean, mlppDomainId: ns0:String128, mlppIndicationStatus: , preemption: , useTrustedRelayPoint: , retryVideoCallAsAudio: ns0:boolean, securityProfileName: ns0:XFkType, sipProfileName: ns0:XFkType, cgpnTransformationCssName: ns0:XFkType, useDevicePoolCgpnTransformCss: ns0:boolean, geoLocationName: ns0:XFkType, geoLocationFilterName: ns0:XFkType, sendGeoLocation: ns0:boolean, lines: {({line: ns0:XPhoneLine[]} | {lineIdentifier: ns0:XNumplanIdentifier[]})}, phoneTemplateName: ns0:XFkType, speeddials: {speeddial: ns0:XSpeeddial[]}, busyLampFields: {busyLampField: ns0:XBusyLampField[]}, primaryPhoneName: ns0:XFkType, ringSettingIdleBlfAudibleAlert: , ringSettingBusyBlfAudibleAlert: , blfDirectedCallParks: {blfDirectedCallPark: ns0:XBLFDirectedCallPark[]}, addOnModules: {addOnModule: ns0:XAddOnModule[]}, userLocale: , networkLocale: , idleTimeout: , authenticationUrl: xsd:string, directoryUrl: xsd:string, idleUrl: xsd:string, informationUrl: xsd:string, messagesUrl: xsd:string, proxyServerUrl: xsd:string, servicesUrl: xsd:string, services: {service: ns0:XSubscribedService[]}, softkeyTemplateName: ns0:XFkType, defaultProfileName: ns0:XFkType, enableExtensionMobility: ns0:boolean, singleButtonBarge: , joinAcrossLines: , builtInBridgeStatus: , callInfoPrivacyStatus: , hlogStatus: , ownerUserName: ns0:XFkType, ignorePresentationIndicators: ns0:boolean, packetCaptureMode: , packetCaptureDuration: , subscribeCallingSearchSpaceName: ns0:XFkType, rerouteCallingSearchSpaceName: ns0:XFkType, allowCtiControlFlag: ns0:boolean, presenceGroupName: ns0:XFkType, unattendedPort: ns0:boolean, requireDtmfReception: ns0:boolean, rfc2833Disabled: ns0:boolean, certificateOperation: , authenticationMode: , keySize: , keyOrder: , ecKeySize: , authenticationString: ns0:String128, upgradeFinishTime: xsd:string, deviceMobilityMode: , remoteDevice: ns0:boolean, dndOption: , dndRingSetting: , dndStatus: ns0:boolean, isActive: ns0:boolean, isDualMode: ns0:boolean, mobilityUserIdName: ns0:XFkType, phoneSuite: , phoneServiceDisplay: , isProtected: ns0:boolean, mtpRequired: ns0:boolean, mtpPreferedCodec: , dialRulesName: ns0:XFkType, sshUserId: ns0:String50, sshPwd: ns0:String255, digestUser: ns0:String255, outboundCallRollover: , hotlineDevice: ns0:boolean, secureInformationUrl: ns0:String255, secureDirectoryUrl: ns0:String255, secureMessageUrl: ns0:String255, secureServicesUrl: ns0:String255, secureAuthenticationUrl: ns0:String255, secureIdleUrl: ns0:String255, alwaysUsePrimeLine: , alwaysUsePrimeLineForVoiceMessage: , featureControlPolicy: ns0:XFkType, deviceTrustMode: , earlyOfferSupportForVoiceCall: ns0:boolean, requireThirdPartyRegistration: ns0:boolean, blockIncomingCallsWhenRoaming: ns0:boolean, homeNetworkId: xsd:string, AllowPresentationSharingUsingBfcp: ns0:boolean, confidentialAccess: {confidentialAccessMode: , confidentialAccessLevel: }, requireOffPremiseLocation: ns0:boolean, allowiXApplicableMedia: ns0:boolean, cgpnIngressDN: ns0:XFkType, useDevicePoolCgpnIngressDN: ns0:boolean, msisdn: ns0:String128, enableCallRoutingToRdWhenNoneIsActive: ns0:boolean, wifiHotspotProfile: ns0:XFkType, wirelessLanProfileGroup: ns0:XFkType, elinGroup: ns0:XFkType, ctiid: xsd:positiveInteger)

我可以这样做:

但是,这不会返回dict.

任何人都可以建议一种方法来过滤 dict 以仅包括返回使用 zeep 指定的 SOAP 调用所需的必要键/值?是否有更好的方法以更有效的方式利用 zeep 库与它从 wsdl 生成的对象进行交互?

0 投票
2 回答
1876 浏览

python-3.x - 如何使用 ZEEP 更改 SOAP 请求中的端点地址

我正在使用 ZEEP 发出 SOAP 请求,它很简单而且效果很好。

问题是端点 URL(在 WSDL 中)不正确。

我可以通过直接编辑 WSDL 来解决问题,但这不可扩展。

我查看了有关创建服务代理的 ZEEP 文档,但我不理解它并且遇到了错误。以下是 WSDL 中包含错误 URL 的部分:

位置是我需要改变的。我需要从“localhost”更改为 LAN IP 地址。此值可能会经常更改,因此我不想每次都编辑 WSDL。

有谁知道如何用 Zeep 做到这一点?

任何帮助是极大的赞赏!

0 投票
1 回答
818 浏览

python - Python AXL/SOAP w。齐普。如何避免重复的字典键?

我写了这个请求:

这导致了预期的请求:

我正在苦苦挣扎的是用两个这样的服务器条目形成一个请求:

我通过 python -mzeep 检查了 WSDL。这是相关的行:

所以,我形成了这样的请求:

它仍然有效,但忽略了第二个服务器条目。有没有人提示如何做到这一点?

0 投票
0 回答
1176 浏览

python - 如何将 zeep 中的嵌套数据作为参数传递 {schema: , _value_1: ANY}

我正在尝试调用 wsdl soap 服务的服务 PushConstContractParcels 问题是我不知道如何在 zeep 包中发送模式参数

这是元素及其变量

这是我的代码以获得结果

我不知道如何发送 {schema: , _value_1: ANY} 变量作为 client.service 中的参数。我还在 zeep 中使用了 (xsd:any) 任何对象,但我认为这不合适

0 投票
1 回答
587 浏览

python - SOAP 操作名称:使用 Zeep 导入

我对 WSDL 操作名称有疑问:import。在远程服务器上更新产品列表是最重要的远程操作之一。

当我想调用该方法时,问题就开始了:

因为'import'语句保留给python。如何使调用此方法不会干扰python?

下面的代码工作正常。也许有人会使用它。

0 投票
1 回答
1383 浏览

python-2.7 - Python Zeep - 如何为元素设置属性

我有这样的要求:

我如何设置参数?

我设置了其他值,如下所示,但我不知道如何设置这些属性。

任何人都可以帮忙吗?

0 投票
2 回答
15353 浏览

python - 使用 Python Zeep 内省 WSDL

我试图使用 Zeep 来描述给定 WSDL 中的操作和类型,以便程序知道操作名称、它们的参数名称、参数类型和参数属性。

此信息将用于为给定的 WSDL 动态生成 UI。

到目前为止,我得到的只是操作和类型的字符串表示。使用与此答案中的代码类似的代码。

这是一个例子:

这给出如下输出(为简洁起见缩短)

.signature() 返回的字符串表示具有名称和类型,但我不知道如何单独解析它们。我也尝试使用 dir() 遍历每个对象 attrs,但它们不包含此信息。它似乎嵌套得更深。

我可以自己解析字符串表示,但是我也错过了参数是否是可选的(更具体地说,如果它具有属性 minOccurs=0

似乎SOAPpy 实际上具有此功能,但不再维护。

那么有没有办法用 zeep 自省 WSDL,它提供关于每个操作的详细信息,它的参数名称、类型和类似于 SOAPpy 实现的属性?或者我应该解析签名,还是使用常规 XML 解析器解析 WSDL。

0 投票
1 回答
384 浏览

python - 如何在 SOAP 库 zeep 中解决过去的错误?

我遇到了一个错误,无法找到绕过它的方法 - 它完全阻止了我的进步。如何通过 Python 使用 SOAP 访问此 API?

我得到的错误是 ValueError:

蟒蛇 3.6

0 投票
1 回答
1743 浏览

python - 带有zeep的python SOAP,requests.exception:403客户端错误

我正在尝试在 python 中使用 SOAP 客户端zeep到目前为止,我在尝试让它运行方面的运气为零。我不断收到以下错误。

我已经尝试过使用和不使用基本身份验证的程序。

和没有基本身份验证的版本。

0 投票
1 回答
711 浏览

python - Netsuite 命名空间冲突(core_2017_2.platform 与 accounting_2017_2.lists)

我想从我的 Python 脚本中将日记条目发布到 Netsuite。我正在使用 zeep 与 SuiteTalk 交谈。

我是 Netsuite 的新手,我是 SOAP 的新手。在互联网示例之后,我设法使用以下代码通过 Python 脚本添加了一个测试客户:

WSDL_URL我正在使用的是https://webservices.netsuite.com/wsdl/v2017_2_0/netsuite.wsdl

使用上面的客户端,下面的代码添加了客户:

以上Customer成功添加到 Netsuite 帐户,我可以在 webapp 的列表中看到它。继续上面的例子,我写了这段代码来添加JournalEntry

这在调用中失败并client.service.add(...)出现错误:

zeep.exceptions.Fault:org.xml.sax.SAXException:预期 {urn:core_2017_2.platform.webservices.netsuite.com} 名称,找到 {urn:accounting_2017_2.lists.webservices.netsuite.com} 名称

我确信这在 SOAP 世界中很愚蠢,但我不确定要调试到哪个方向。为什么预期的和找到的有区别?我没有提到任何特定的命名空间。它只是 WSDL v2017_2_0,所有的client.get_type()调用都是在此之上进行的。这个错误来自哪里?

在 Netsuite 用户组问过同样的问题: https ://usergroup.netsuite.com/users/forum/platform-areas/web-services-suitetalk/434717-netsuite-namespace-conflict#post434717

更新: 根据@Justin W 的回答,事实证明,我可以直接告诉 Suitetalk和使用 a和 Suitetalk 将了解使用什么和s ,而不是从 Suitetalk 获取subsidiaryand accountsinternalId然后将它们添加到请求中.typeinternalIdRecordRefsubsidiaryaccount

subsidiary = get_record_by_type(client, 'subsidiary', '1')可以更改为subsidiary = RecordRef(internalId='1', type='subsidiary')

相似地

可以改为