无法利用以字符串形式存在的方法名称(来自网络服务)。我尝试利用 getattr,但后来无法将其扩展为 suds

发布于 2024-10-30 21:30:53 字数 1289 浏览 1 评论 0原文

from suds.client import Client #@UnresolvedImport
from suds.transport.https import HttpAuthenticated #@UnresolvedImport
import urllib2

class methodinvokeclass():
    def methodinvokemethod(self,*args):

        method=args[1]
        c=args[2]
        print c
        response=c.service.method("90210")# I know this wont work,coz of method, but even I cant get me way thru with getattr
        #response=c.service.LatLonListZipCode("90210")

        print response

if __name__=="__main__":

        invokemethodname="LatLonListZipCode"#Webservice name which I want to invoke...later !

        f=open("C:\wsdllocation.txt",'r')# picks up the WSDL file location from the above file
        webservwsdl=f.readline()
        f.close()
        y=methodinvokeclass()#dummy object
        z=methodinvokeclass()#dummy object

        t = HttpAuthenticated(username='x', password='x')#helps me getting thru my corporate firewall
        t.handler = urllib2.HTTPBasicAuthHandler(t.pm)#helps me getting thru my corporate firewall
        t.urlopener = urllib2.build_opener(t.handler)#helps me getting thru my corporate firewall
        c = Client(url=webservwsdl,transport=t)#SUDs client !!!!!

        x=y.methodinvokemethod(z,invokemethodname,c)# invoking the code above
from suds.client import Client #@UnresolvedImport
from suds.transport.https import HttpAuthenticated #@UnresolvedImport
import urllib2

class methodinvokeclass():
    def methodinvokemethod(self,*args):

        method=args[1]
        c=args[2]
        print c
        response=c.service.method("90210")# I know this wont work,coz of method, but even I cant get me way thru with getattr
        #response=c.service.LatLonListZipCode("90210")

        print response

if __name__=="__main__":

        invokemethodname="LatLonListZipCode"#Webservice name which I want to invoke...later !

        f=open("C:\wsdllocation.txt",'r')# picks up the WSDL file location from the above file
        webservwsdl=f.readline()
        f.close()
        y=methodinvokeclass()#dummy object
        z=methodinvokeclass()#dummy object

        t = HttpAuthenticated(username='x', password='x')#helps me getting thru my corporate firewall
        t.handler = urllib2.HTTPBasicAuthHandler(t.pm)#helps me getting thru my corporate firewall
        t.urlopener = urllib2.build_opener(t.handler)#helps me getting thru my corporate firewall
        c = Client(url=webservwsdl,transport=t)#SUDs client !!!!!

        x=y.methodinvokemethod(z,invokemethodname,c)# invoking the code above

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彩虹直至黑白 2024-11-06 21:30:53

您可以使用 getattr 从服务中检索 SOAP 方法。请使用此示例:

impl = getattr(c.service, method)
response = impl('90210')
print response

这是一个使用 webservicex 测试 SOAP 服务 的工作示例:

url = 'http://www.webservicex.net/stockquote.asmx?WSDL'
client = Client(url=url)
name = 'GetQuote'
impl = getattr(client.service, name)
print impl('IBM')

输出:

<StockQuotes>
<Stock>
    <Symbol>IBM</Symbol>
    <Last>163.81</Last>
    <Date>4/7/2011</Date>
    <Time>11:47am</Time>
    <Change>-0.23</Change>
    <Open>164.10</Open>
    <High>164.5463</High>
    <Low>163.44</Low>
    <Volume>1573461</Volume>
    <MktCap>199.8B</MktCap>
    <PreviousClose>164.04</PreviousClose>
    <PercentageChange>-0.14%</PercentageChange>
    <AnnRange>116.00 - 167.72</AnnRange>
    <Earns>11.52</Earns>
    <P-E>14.24</P-E>
    <Name>International Bus</Name>
</Stock>
</StockQuotes>

You can use getattr to retrieve the SOAP method from the service. Use this instead:

impl = getattr(c.service, method)
response = impl('90210')
print response

Here is a working example, using a webservicex test SOAP service:

url = 'http://www.webservicex.net/stockquote.asmx?WSDL'
client = Client(url=url)
name = 'GetQuote'
impl = getattr(client.service, name)
print impl('IBM')

Output:

<StockQuotes>
<Stock>
    <Symbol>IBM</Symbol>
    <Last>163.81</Last>
    <Date>4/7/2011</Date>
    <Time>11:47am</Time>
    <Change>-0.23</Change>
    <Open>164.10</Open>
    <High>164.5463</High>
    <Low>163.44</Low>
    <Volume>1573461</Volume>
    <MktCap>199.8B</MktCap>
    <PreviousClose>164.04</PreviousClose>
    <PercentageChange>-0.14%</PercentageChange>
    <AnnRange>116.00 - 167.72</AnnRange>
    <Earns>11.52</Earns>
    <P-E>14.24</P-E>
    <Name>International Bus</Name>
</Stock>
</StockQuotes>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文