2013-03-15 11 views
10

Mentre in passato ho utilizzato le API, questo è il primo SOAP che ho tentato di utilizzare. Ho copiato, incollato e cambiato parte di questo codice da un tutorial SOAP, ma ho visto che ha fatto 10 diversi modi in 10 diversi esempi, ma nessuno è molto chiaro nello spiegare il codice. Forse il seguente codice non è il modo migliore per farlo, ma è per questo che sto cercando un aiuto e una chiara direzione per entrare. Grazie mille.Come chiamare l'API Soap con 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 

risposta

10

Non cercare di rotolare il proprio client SOAP - nonostante il nome, SOAP è tutt'altro che semplice.

Trova qualsiasi decent SOAP library e utilizzalo per la tua comunicazione SOAP.

Generalmente, la domanda di which SOAP library is "the best" è di natura contenziosa e la risposta tende a variare nel tempo, poiché i progetti entrano ed escono di moda. Scegli quello che funziona bene per il tuo caso d'uso, e chiunque è probabile che sia meglio che scrivere il tuo.

+2

alla Python regole di documentazione, non c'è alcun motivo per dire un utente che cosa * non * da fare. Piuttosto, dovresti spiegare i problemi nel codice OP o semplicemente suggerire che questa potrebbe essere una soluzione, senza scoraggiarne un'altra. – Yuval

+1

@Yuval La risposta suggerisce una soluzione migliore - vedere il secondo paragrafo. Il consiglio contro un approccio non inventato qui è stato dato con buona ragione, in buona fede, e in risposta a una domanda che chiedeva chiaramente indicazioni. Due anni dopo, è ancora un buon consiglio, anche se non sei d'accordo con il tono. – user4815162342

+0

@ user4815162342 Si prega di aggiornare la risposta. I collegamenti non sono disponibili ora. –

1

Posso consigliare di utilizzare suds. È abbastanza buono e ampiamente usato.

Aggiornamento: Il roject di base non è attivo per un lungo periodo. C'è un nuovo fork del progetto attuale che è abbastanza attivo ora.

asuds project

+1

l'URL non funziona più, puoi fornire un nuovo URL? – Ayoub