有谁知道一个很好的SUDS教程.我正在尝试对WSDL文件运行测试,我无法找到有关如何执行此操作的任何信息.SUDS与SOAPy有很大的不同吗?任何人都建议它对存储在WSDL文件中的函数运行冒烟测试.
我已经读过Python 2.6+不再支持SOAPAy.这是真的?
我有一个我输入的WSDL文件:
from suds.client import Client
client = Client('http://10.51.54.50/ptz.wsdl')
client.service.GetNode()
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
in open
response = self._open(req, data)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 407, in _open
'_open', req)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 367, in _call_chain
result = func(*args)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1146, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1121, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 111] Connection refused>
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?
我可以通过浏览器连接到此文件.我已经安装了所有的泡沫包.是否还需要其他设置?
我想用suds或soap.py替换应用程序当前(严重破坏和狡猾)基于cURL(基于cURL 命令行!)的SOAP客户端.麻烦的是,我们必须联系MS CRM服务,因此必须使用NTLM.由于各种原因,NTLM代理使用起来有点痛苦,所以我正在研究python-ntlm来提供这种支持.
可以使用suds或soap.py来使用此身份验证方法吗?如果是这样,怎么样?如果没有,任何其他建议都会很棒.
编辑
如下所述,suds已经开箱即用支持python-ntlm.
我正在努力与Commission Junction(CJ)的HORRIBLE网络服务合作.我可以让客户端连接并从CJ接收信息,但是他们的数据库似乎包含一堆导致UnicideDecodeError的坏字符.
现在我在做:
from suds.client import Client
wsdlLink = 'https://link-search.api.cj.com/wsdl/version2/linkSearchServiceV2.wsdl'
client = Client(wsdlLink)
result = client.service.searchLinks(developerKey='XXX', websiteId='XXX', promotionType='coupon')
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到我打出一个类似'CorpNet®10%Off Off Service'的记录,然后®导致它破坏我得到
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 758: ordinal not in range(128)" error.
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的头上对®进行编码,这样当SUDS读入结果时它不会中断?
更新:澄清一下,®来自CJ数据库,并在他们的回复中.所以我需要在SUDS处理响应之前解码非ascii字符.我不确定在SUD中如何(或是否)这样做.
嗨,上面是我之前关于肥皂的问题.在那里我传递一维数组.现在我的问题是我需要将2D数组传递给以下Soap架构.
请求架构
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CalculateWeb2DObjectArray xmlns="http://tempuri.org/">
<HCID>string</HCID>
<jaggedobjDataMICRO>
<ArrayOfAnyType>
<anyType />
<anyType />
</ArrayOfAnyType>
<ArrayOfAnyType>
<anyType />
<anyType />
</ArrayOfAnyType>
</jaggedobjDataMICRO>
<numeratorID>int</numeratorID>
</CalculateWeb2DObjectArray>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
响应模式
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CalculateWeb2DObjectArrayResponse xmlns="http://tempuri.org/">
<CalculateWeb2DObjectArrayResult>
<ArrayOfAnyType>
<anyType />
<anyType />
</ArrayOfAnyType>
<ArrayOfAnyType>
<anyType />
<anyType />
</ArrayOfAnyType>
</CalculateWeb2DObjectArrayResult>
</CalculateWeb2DObjectArrayResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我的守则
from suds.xsd.doctor import Import, ImportDoctor
from suds.client import Client
# enable logging to see transmitted XML
import logging
logging.basicConfig(level=logging.INFO) …Run Code Online (Sandbox Code Playgroud) 我在Linux Slackware 13.0上使用python 2.6.2运行SUDS 0.4.当我使用此代码调用SOAP方法时:
from suds.client import Client
client = Client(url='file:acctWeb.wsdl',
location='http://10.242.69.4:8088/pfmaccess')
res = client.service.login(login='user',password='passwd')
Run Code Online (Sandbox Code Playgroud)
我收到以下回复:
DEBUG:suds.transport.http:received:
CODE: 200
HEADERS: {'set-cookie': 'OSP_Ref=0000000573800052;Domain=10.242.69.4:8088;Path=/pfmaccess', 'content-length': '26541', 'content-type': 'text/xml; charset=utf-8', 'connection': 'close', 'server': 'Alcatel-Lucent OSP 2.4'}
Run Code Online (Sandbox Code Playgroud)
但
>>> client.options.transport.cookiejar
<cookielib.CookieJar[]>
Run Code Online (Sandbox Code Playgroud)
表明没有可用的cookie.可能是什么原因?我无法使用SOAP API,因为我需要传递响应cookie中发送的凭据.
请帮帮我.
BR
rjan
环境:
我使用的WSDL(服务器)有以下架构子部分(我试图用纯文本清楚地写出来) -
[第1节]
searchRequest: (searchRequest){
userIdentification = (userIdentification){
username = ""
password = ""
}
itineraryArr = (itineraryArray){
_arrayType = ""
_offset = ""
_id = ""
_href = ""
_arrayType = ""
}
...
...
Run Code Online (Sandbox Code Playgroud)
[第2节]
itinerary: (itinerary){
departurePoint = (locationPoint){
locationId = None
radius = None
}
arrivalPoint = (locationPoint){
locationId = None
radius = None
}
...
...
Run Code Online (Sandbox Code Playgroud)
'userIdentification'没有问题(这是一种"简单"类型)
但是,'itineraryArr'是一个'行程'数组,我不知道如何使用python来创建XML数组.
例如,我尝试了几种组合
itinerary0 = self.client.factory.create('itinerary')
itineraryArray = self.client.factory.create('itineraryArray')
itineraryArray = [itinerary0]
searchRequest.itineraryArr = itineraryArray …Run Code Online (Sandbox Code Playgroud) 我必须用肥皂水和Python做肥皂请求
<soap:Body>
<registerOrder>
<order merchantOrderNumber="" description="" amount="" currency="" language="" xmlns="">
<returnUrl>http://mysafety.com</returnUrl>
</order>
</registerOrder>
</soap:Body>
Run Code Online (Sandbox Code Playgroud)
如何在registerOrder中添加属性?
我很确定suds并没有像我期望的那样缓存我的WSDL和XSD .以下是我知道没有使用缓存对象的方法:
client = Client(url)我有一个小程序,它创建一个suds客户端,发送一个请求,获取响应,然后结束.我的期望是每次运行程序时,都应该从文件缓存中获取WSDL和XSD文件,而不是从URL中获取.这就是为什么我认为:
client.options.cache.duration 被设置为 ('days', 1)client.options.cache.location设置为c:\docume~1\mlin\locals~1\temp\suds,我看到每次运行程序时生成并重新生成缓存文件我是否误解了suds缓存应该如何工作?
我正在使用一些有点非标准的SOAP Web服务.对webservice的大多数调用都会按预期返回标准SOAP XML,但是一个调用特别会返回一个JSON字符串.这会破坏客户端的xml解析器.
我的问题是; 有没有办法在SUDS中的特定web方法上指定返回类型,以便它不会尝试通过xml解析器运行它?我只想要原始的JSON响应.
我想提取所有方法,并希望使用如何使用python进行自动化来发送一些参数.
我只希望方法作为用户输入并将参数发送到方法.我怎样才能做到这一点?
from suds.client import client
url="name fo the url"
client=Client(url)
Suds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-20100913
Service ( Services ) tns="http://www.altoromutual.com/bank/ws/"
Prefixes (1)
ns0 = "http://www.altoromutual.com/bank/ws/"
Ports (2):
(ServicesSoap)
Methods (3):
GetUserAccounts(xs:int UserId, )
IsValidUser(xs:string UserId, )
TransferBalance(MoneyTransfer transDetails, )
Types (4):
AccountData
ArrayOfAccountData
MoneyTransfer
Transaction
(ServicesSoap12)
Methods (3):
GetUserAccounts(xs:int UserId, )
IsValidUser(xs:string UserId, )
TransferBalance(MoneyTransfer transDetails, )
Types (4):
AccountData
ArrayOfAccountData
MoneyTransfer
Transaction
Run Code Online (Sandbox Code Playgroud)