def single_request_with_cookies(self, host, handler, request_body, verbose=0):
"""
NOTE: Only used on Python 2.7!
This is just python 2.7's xmlrpclib.Transport.single_request, with
send additions noted below to send cookies along with the request
"""
if sys.version_info >= (3,):
return
h = self.make_connection(host)
if verbose:
h.set_debuglevel(1)
# ADDED: construct the URL and Request object for proper cookie handling
request_url = "%s://%s%s" % (self.scheme, host, handler)
# log.debug("request_url is %s" % request_url)
cookie_request = urllib2.Request(request_url)
try:
self.send_request(h, handler, request_body)
self.send_host(h, host)
# ADDED. creates cookiejar if None.
self.send_cookies(h, cookie_request)
self.send_user_agent(h)
self.send_content(h, request_body)
response = h.getresponse(buffering=True)
# ADDED: parse headers and get cookies here
cookie_response = CookieResponse(response.msg)
# Okay, extract the cookies from the headers
self.cookiejar.extract_cookies(cookie_response, cookie_request)
# log.debug("cookiejar now contains: %s" % self.cookiejar._cookies)
# And write back any changes
if hasattr(self.cookiejar, 'save'):
try:
self.cookiejar.save(self.cookiejar.filename)
except Exception as e:
raise
# log.error("Couldn't write cookiefile %s: %s" % \
# (self.cookiejar.filename,str(e)))
if response.status == 200:
self.verbose = verbose
return self.parse_response(response)
if (response.getheader("content-length", 0)):
response.read()
raise xmlrpclib.ProtocolError(
host + handler,
response.status, response.reason,
response.msg,
)
except xmlrpclib.Fault:
raise
finally:
h.close()
# Override the appropriate request method
评论列表
文章目录