我是python的新手,并且在使用SUDS包调用SOAP方法时遇到了一些问题。 我有这个Tk gui应用程序,从Treeview小部件我选择方法名称并从Entry小部件传递参数值。 我可以在变量中获取方法名称,但问题是,如何将变量值作为SUDS方法名称传递?
我有这段代码:
from tkinter import *
from tkinter import ttk
import sys
from suds.client import *
class SoapClass:
def __init__(self, master):
self.client = Client('http://www.webservicex.net/ConvertWeight.asmx?WSDL', username='', password='', faults=False)
Button(master, text='Call', command=self.request).pack()
def request(self):
methodName = 'ConvertWeight'
#Here I would like to pass methodName variable
response = self.client.service.ConvertWeight(80, 'Kilograms', 'Grams')
print(response)
root = Tk()
app = SoapClass(root)
root.mainloop()
我想这样做:
methodName = 'ConvertWeight'
response = self.client.service.methodName(80, 'Kilograms', 'Grams')
当然,Web Service给了我:
引发MethodNotFound(qn)
suds.MethodNotFound:找不到方法:'ConvertWeights.ConvertWeightsSoap.methodName'
我该怎么做?这甚至可能吗?
答案 0 :(得分:0)
经过一段时间挖掘互联网后,我找到了解决方案。
起初我抬头看了看:
params = client.factory.create('ConvertWeight')
并将所需参数添加到此对象。
不幸的是没有运气,因为在我调查的时候,我的WSDL被破坏了,但ImportDoctor
无法修复我的WSDL,在调用client.factory.create()
时,错误说“未找到类型”这清楚地表明WSDL有些不对。
无论如何我找到了另一个解决方案:
MethodToExecute = getattr(self.client.service, methodName)
try:
response = MethodToExecute(*array)
except WebFault as e:
response = e
所以现在我可以调用我选择的任何方法,并添加尽可能多的参数。
希望我的解决方案能帮到某个人。