问题 如何使用Python调用Soap API


虽然我过去使用过API,但这是我尝试使用的第一个SOAP。我从SOAP教程中复制,粘贴和更改了一些代码,但我已经看到它在10个不同的示例中以10种不同的方式完成,但没有一个在解释代码时非常清楚。也许以下代码不是最好的方法,但这就是为什么我正在寻找一些帮助和明确的方向进入。非常感谢。

import string, os, sys, httplib

server_addr = "auctions.godaddy.com"
service_action = "GdAuctionsBiddingWSAPI/GetAuctionList"

body = """
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.example.com/services/wsdl/2.0">
<soapenv:Header/>
<soapenv:Body>
<ns:serviceListRequest>
<ns:userInfo>
</ns:userInfo>
</ns:serviceListRequest>
</soapenv:Body>
</soapenv:Envelope>"""

request = httplib.HTTPConnection(server_addr)
request.putrequest("POST", service_action)
request.putheader("Accept", "application/soap+xml, application/dime, multipart/related, text/*")
request.putheader("Content-Type", "text/xml; charset=utf-8")
request.putheader("Cache-Control", "no-cache")
request.putheader("Pragma", "no-cache")
request.putheader("SOAPAction", "https://auctions.godaddy.com/gdAuctionsWSAPI/gdAuctionsBiddingWS.asmx?op=GetAuctionList" + server_addr + service_action)
request.putheader("Content-Length", "length")
request.putheader("apiKey", "xxxxxx")
request.putheader("pageNumber", "1")
request.putheader("rowsPerPage", "1")
request.putheader("beginsWithKeyword", "word")
request.endheaders()
request.send(body)
response = request.getresponse().read()

print response

11588
2018-03-15 15:54


起源



答案:


不要尝试滚动自己的SOAP客户端 - 尽管名称,SOAP不是简单的。

找到任何 体面的SOAP库 并将其用于SOAP通信。

一般来说,问题 哪个SOAP库是“最好的” 本质上是有争议的,随着时间的推移,答案往往随着项目的进入而变得过时。选择一个效果很好的 你的 用例,任何一个都可能比编写自己的更好。


10
2018-03-15 15:57



一个Python文档规则,没有理由告诉用户什么 不 去做。相反,你应该解释OP代码中的问题,或者只是建议这可能是一个解决方案,而不会阻止另一个。 - Yuval
@Yuval答案确实提出了一个更好的解决方案 - 见第二段。对于一个没有发明的方法的建议是出于善意,并且在回答明确询问方向的问题时给出的。两年后,即使你不同意语气,这仍然是一个很好的建议。 - user4815162342
@ user4815162342请更新你的答案。这些链接现在不可用。 - Rahul K P
@RahulKP更新了,感谢您的信息。 - user4815162342


答案:


不要尝试滚动自己的SOAP客户端 - 尽管名称,SOAP不是简单的。

找到任何 体面的SOAP库 并将其用于SOAP通信。

一般来说,问题 哪个SOAP库是“最好的” 本质上是有争议的,随着时间的推移,答案往往随着项目的进入而变得过时。选择一个效果很好的 你的 用例,任何一个都可能比编写自己的更好。


10
2018-03-15 15:57



一个Python文档规则,没有理由告诉用户什么 不 去做。相反,你应该解释OP代码中的问题,或者只是建议这可能是一个解决方案,而不会阻止另一个。 - Yuval
@Yuval答案确实提出了一个更好的解决方案 - 见第二段。对于一个没有发明的方法的建议是出于善意,并且在回答明确询问方向的问题时给出的。两年后,即使你不同意语气,这仍然是一个很好的建议。 - user4815162342
@ user4815162342请更新你的答案。这些链接现在不可用。 - Rahul K P
@RahulKP更新了,感谢您的信息。 - user4815162342


我可以建议你使用 泡沫。它非常好并且被广泛使用。

更新: 基础泡沫项目长期不活跃。当前项目有一个新的分支,现在非常活跃。

asuds项目


1
2018-03-15 16:02



网址不再有效,您能提供新的网址吗? - Ayoub
@Ayoub pypi.org/project/suds-jurko - Liquidgenius