def _single_request(self, host, handler, request_body, verbose=0):
# issue XML-RPC request
request_url = "%s://%s/" % (self.scheme, host)
cookie_request = urllib2.Request(request_url)
h = self.make_connection(host)
self.verbose = verbose
if verbose:
h.set_debuglevel(1)
try:
self.send_request(h, handler, request_body)
self.send_host(h, host)
self.send_cookies(h, cookie_request)
self.send_user_agent(h)
self.send_content(h, request_body)
response = h.getresponse(buffering=True)
if response.status == 401 and USE_KERBEROS:
vc, challenge = self._kerberos_client_request(host, handler, response.status, response.reason, response.msg)
# discard any response data
if (response.getheader("content-length", 0)):
response.read()
# retry the original request & add the Authorization header:
self.send_request(h, handler, request_body)
self._extra_headers = [("Authorization", "Negotiate %s" % challenge)]
self.send_host(h, host)
self.send_user_agent(h)
self.send_content(h, request_body)
self._extra_headers = []
response = h.getresponse(buffering=True)
self._kerberos_verify_response(vc, host, handler, response.status, response.reason, response.msg)
if response.status == 200:
self.verbose = verbose
self._save_cookies(response.msg, cookie_request)
return self.parse_response(response)
except xmlrpclib.Fault:
raise
except Exception:
# All unexpected errors leave connection in
# a strange state, so we clear it.
self.close()
raise
# discard any response data and raise exception
if (response.getheader("content-length", 0)):
response.read()
raise xmlrpclib.ProtocolError(host + handler, response.status, response.reason, response.msg)
# override the appropriate request method
评论列表
文章目录