def _unpackageResult(self, header, response): status = header['status'] if status == '200': result = httputil.unserialize(header, response) return self._returnOrRaise(result) else: raise error.ProtocolError("Request Failed: %s:%s" % (status, response))
class Transport(xmlrpclib.Transport): """Handles an HTTP transaction to an XML-RPC server.""" def __init__(self): self.connection = None # client identifier (may be overridden) user_agent = "xmlrpclib.py/%s (by www.pythonware.com)" % xmlrpclib.__version__ ## # Send a complete request, and parse the response. # # @param host Target host. # @param handler Target PRC handler. # @param request_body XML-RPC request body. # @param verbose Debugging flag. # @return Parsed response. def _full_request(self, host, handler, request_body): self.send_request(handler, request_body) self.send_host(host) self.send_user_agent() self.send_content(request_body) def request(self, host, handler, request_body, verbose=0): # issue XML-RPC request self.make_connection(host) if verbose: self.connection.set_debuglevel(1) try: self._full_request(host, handler, request_body) except: # If anything goes wrong, retry by first closing the connection. # Any exceptions at this point are allowed to propagate out for # handling code to deal with them. try: self.connection.close() self._full_request(host, handler, request_body) except Exception, e: # last_type = e.__name__ msg = ("Error connecting to the server, please recreate the " "client.\n" "The original internal error was:\n" "%r" % e) raise error.ConnectionError(msg) response = self.connection.getresponse() errcode = response.status errmsg = response.reason headers = response.msg if errcode != 200: raise error.ProtocolError(host + handler, errcode, errmsg, headers) self.verbose = verbose return self.parse_response(response)
def _badRequest(self, request): e = error.ProtocolError("Improperly Formed Request: %s:%s" % (request.path, request.args)) return self.packageFailure(failure.Failure(e))