好的,所以SUDS有相當的魔力。
一個suds.client.Client
,從WSDL文件構建:
client = suds.client.Client("http://mssoapinterop.org/asmx/simple.asmx?WSDL")
它下載的WSDL,並創建client.wsdl
的定義。當你通過client.service.<method>
調用一個使用SUDS的方法時,它實際上在幕後對這個解釋的WSDL做了大量的遞歸解決魔法。爲了發現你需要反思這個對象的方法的參數和類型。
例如:
for method in client.wsdl.services[0].ports[0].methods.values():
print '%s(%s)' % (method.name, ', '.join('%s: %s' % (part.type, part.name) for part in method.soap.input.body.parts))
這應該打印出類似這樣:
echoInteger((u'int', http://www.w3.org/2001/XMLSchema): inputInteger)
echoFloatArray((u'ArrayOfFloat', http://soapinterop.org/): inputFloatArray)
echoVoid()
echoDecimal((u'decimal', http://www.w3.org/2001/XMLSchema): inputDecimal)
echoStructArray((u'ArrayOfSOAPStruct', http://soapinterop.org/xsd): inputStructArray)
echoIntegerArray((u'ArrayOfInt', http://soapinterop.org/): inputIntegerArray)
echoBase64((u'base64Binary', http://www.w3.org/2001/XMLSchema): inputBase64)
echoHexBinary((u'hexBinary', http://www.w3.org/2001/XMLSchema): inputHexBinary)
echoBoolean((u'boolean', http://www.w3.org/2001/XMLSchema): inputBoolean)
echoStringArray((u'ArrayOfString', http://soapinterop.org/): inputStringArray)
echoStruct((u'SOAPStruct', http://soapinterop.org/xsd): inputStruct)
echoDate((u'dateTime', http://www.w3.org/2001/XMLSchema): inputDate)
echoFloat((u'float', http://www.w3.org/2001/XMLSchema): inputFloat)
echoString((u'string', http://www.w3.org/2001/XMLSchema): inputString)
所以該部分的類型元組的第一個元素可能是你追求的:
>>> client.factory.create(u'ArrayOfInt')
(ArrayOfInt){
_arrayType = ""
_offset = ""
_id = ""
_href = ""
_arrayType = ""
}
更新:
對於天氣服務出現的「參數」與一個element
不是type
部分:
>>> client = suds.client.Client('http://www.webservicex.net/WeatherForecast.asmx?WSDL')
>>> client.wsdl.services[0].ports[0].methods.values()[0].soap.input.body.parts[0].element
(u'GetWeatherByZipCode', http://www.webservicex.net)
>>> client.factory.create(u'GetWeatherByZipCode')
(GetWeatherByZipCode){
ZipCode = None
}
但這magic'd到方法調用(一拉client.service.GetWeatherByZipCode("12345")
的參數。 IIRC這是SOAP RPC綁定風格嗎?我想這裏有足夠的信息讓你開始。提示:Python命令行界面是你的朋友!
出於某種原因,這些都是「無」與我一起工作的WSDL,所以我沒有得到的參數或類型,但是,它們在str(客戶端)中顯示,並且具有參數和類型。 – Wyrmwood 2015-07-28 17:02:23