J'essaie d'envoyer une requête SOAP en utilisant SOAPpy en tant que client. J'ai trouvé de la documentation expliquant comment ajouter un cookie en étendant SOAPpy.HTTPTransport, mais je n'arrive pas à le faire fonctionner.Ajouter un cookie à une requête SOAPpy
J'ai essayé d'utiliser l'exemple here, mais le serveur que je suis en train d'envoyer la demande a commencé à jeter 415 erreurs, donc je suis en train d'accomplir cela sans l'aide ClientCookie, ou comprendre pourquoi le serveur est lancer 415 quand je l'utilise. Je soupçonne que ce pourrait être parce que ClientCookie utilise urllib2 & http/1.1, alors que SOAPpy utilise urllib & http/1.0
Est-ce que quelqu'un sait comment faire ClientCookie utiliser http/1.0, si cela est même le problème, ou un moyen d'ajouter un cookie aux en-têtes SOAPpy sans utiliser ClientCookie? Si vous avez essayé ce code en utilisant d'autres services, il semble seulement lancer des erreurs lors de l'envoi de requêtes aux serveurs Microsoft. Je suis toujours en train de trouver mon pied avec Python, donc ça pourrait être juste moi de faire quelque chose de stupide.
import sys, os, string
from SOAPpy import WSDL,HTTPTransport,Config,SOAPAddress,Types
import ClientCookie
Config.cookieJar = ClientCookie.MozillaCookieJar()
class CookieTransport(HTTPTransport):
def call(self, addr, data, namespace, soapaction = None, encoding = None,
http_proxy = None, config = Config):
if not isinstance(addr, SOAPAddress):
addr = SOAPAddress(addr, config)
cookie_cutter = ClientCookie.HTTPCookieProcessor(config.cookieJar)
hh = ClientCookie.HTTPHandler()
hh.set_http_debuglevel(1)
# TODO proxy support
opener = ClientCookie.build_opener(cookie_cutter, hh)
t = 'text/xml';
if encoding != None:
t += '; charset="%s"' % encoding
opener.addheaders = [("Content-Type", t),
("Cookie", "Username=foobar"), # ClientCookie should handle
("SOAPAction" , "%s" % (soapaction))]
response = opener.open(addr.proto + "://" + addr.host + addr.path, data)
data = response.read()
# get the new namespace
if namespace is None:
new_ns = None
else:
new_ns = self.getNS(namespace, data)
print '\n' * 4 , '-'*50
# return response payload
return data, new_ns
url = 'http://www.authorstream.com/Services/Test.asmx?WSDL'
proxy = WSDL.Proxy(url, transport=CookieTransport)
print proxy.GetList()
I J'aurais pu comprendre cela, essayer quelque chose – supersighs