Я пытаюсь отправить SOAP-запрос, используя SOAPpy в качестве клиента. Я нашел документацию о том, как добавить файл cookie, расширив SOAPpy.HTTPTransport, но я не могу заставить его работать.Добавление Cookie в запрос SOAPpy
Я пытался использовать пример here, но сервер я пытаюсь отправить запрос начали забрасывать 415 ошибок, так что я пытаюсь сделать это без использования ClientCookie, или выяснить, почему сервер бросая 415, когда я его использую. Я подозреваю, что это может быть потому, что ClientCookie использует urllib2 & HTTP/1.1, в то время как SOAPpy использует URLLIB & HTTP/1.0
ли кто-нибудь знает, как сделать использование ClientCookie HTTP/1.0, если это даже проблема, или способ добавить cookie для заголовков SOAPpy без использования ClientCookie? Если вы пробовали этот код с помощью других сервисов, он просто бросает ошибки при отправке запросов на серверы Microsoft.
Я все еще нахожусь на ногах с питоном, так что это может быть просто что-то неловкое.
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 возможно, понял это, попробовав что-то – supersighs