SOAPpy를 클라이언트로 사용하여 SOAP 요청을 보내려고합니다. SOAPpy.HTTPTransport를 확장하여 쿠키를 추가하는 방법을 설명하는 문서를 찾았지만 제대로 작동하지 않는 것 같습니다. SOAPpy 요청에 쿠키 추가
나는 예 here, 하지만 415 오류를 던지기 시작하는 요청을 보내려고 서버를 사용하려고, 그래서 나는, 또는 서버가 이유를 파악하여 ClientCookie가를 사용하지 않고 이러한 목표를 달성하기 위해 노력하고있어 내가 그것을 사용할 때 415 's를 던지기. 나는 ClientCookie가 사용 때문에 그것이 생각되는 urllib2가 & HTTP/1.1, SOAPpy는 URLLIB를 사용하는 반면 & HTTP/1.0사람은 심지어 문제, 또는 추가하는 방법의 경우, ClientCookie가 사용 HTTP/1.0을 만드는 방법을 알고 있나요 ClientCookie를 사용하지 않고 SOAPpy 헤더에 쿠키? 다른 서비스를 사용하여이 코드를 시도한 경우 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