我試圖使用SOAPpy作爲客戶端發送SOAP請求。我發現了一些文檔,說明如何通過擴展SOAPpy.HTTPTransport來添加一個cookie,但我似乎無法讓它工作。將Cookie添加到SOAPpy請求
我試圖用的例子here, 但我試圖發送到開始嘔吐415個錯誤的請求的服務器,所以我想,或者弄清楚爲什麼服務器要做到這一點,而無需使用ClientCookie當我使用它時扔415。我懷疑這可能是因爲ClientCookie使用的urllib2 & HTTP/1.1,而SOAPpy的使用urllib的& HTTP/1.0
是否有人知道如何使ClientCookie使用HTTP/1.0,如果是連的問題,還是一個方式來增加沒有使用ClientCookie的SOAPpy頭的cookie?如果使用其他服務試用此代碼,它只會在向Microsoft服務器發送請求時拋出錯誤。
我仍然在用python找到自己的立足點,所以它可能只是我在做一些愚蠢的事情。
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()
我可能已經知道了這一點,嘗試一些 – supersighs 2009-06-30 04:19:42