2013-03-15 28 views
10

Während ich APIs in der Vergangenheit verwendet habe, ist dies die erste SOAP, die ich versucht habe zu verwenden. Ich habe einen Teil dieses Codes aus einem SOAP-Tutorial kopiert, eingefügt und geändert, aber ich habe es in 10 verschiedenen Beispielen auf 10 verschiedene Arten gesehen, aber keiner ist sehr klar in der Erklärung des Codes. Vielleicht ist der folgende Code nicht der beste Weg, um das zu tun, aber deshalb suche ich nach etwas Hilfe und einer klaren Richtung, um hineinzugehen. Vielen Dank.So rufen Sie Soap API mit Python

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 

Antwort

10

Versuchen Sie nicht, Ihren eigenen SOAP-Client zu rollen - SOAP ist trotz des Namens alles andere als einfach.

Finden Sie eine decent SOAP library und verwenden Sie es für Ihre SOAP-Kommunikation.

Im Allgemeinen ist die Frage von which SOAP library is "the best" von Natur aus umstritten und die Antwort neigt dazu, mit der Zeit zu variieren, da Projekte in Mode kommen und aus der Mode kommen. Wählen Sie die, die gut funktioniert für Ihre Anwendungsfall, und jeder ist wahrscheinlich besser als das Schreiben Ihrer eigenen.

+2

a la Python-Dokumentation Regeln, gibt es keinen Grund, um einen Benutzer zu sagen, was * * nicht zu tun. Stattdessen sollten Sie die Probleme im OP-Code erklären oder einfach vorschlagen, dass dies eine Lösung ist, ohne einen anderen zu entmutigen. – Yuval

+1

@Yuval Die Antwort schlägt eine bessere Lösung vor - siehe den zweiten Absatz. Ratschläge gegen eine nicht erfundene Herangehensweise wurden aus gutem Grund, in gutem Glauben und als Antwort auf eine Frage gegeben, in der klar um Anweisungen gebeten wurde. Zwei Jahre später ist es immer noch ein guter Rat, auch wenn Sie mit dem Ton nicht einverstanden sind. – user4815162342

+0

@ user4815162342 Bitte aktualisieren Sie Ihre Antwort. Die Links sind jetzt nicht verfügbar. –

1

Ich kann Ihnen raten, suds zu verwenden. Es ist ziemlich gut und weit verbreitet.

Aktualisierung: Base suds roject ist für eine lange Zeit nicht aktiv. Es gibt eine neue Gabelung des aktuellen Projekts, das jetzt ziemlich aktiv ist.

asuds project

+1

die URL funktioniert nicht mehr, können Sie eine neue URL angeben? – Ayoub

Verwandte Themen