def handle_error(self, req, client, addr, exc): request_start = datetime.now() addr = addr or ('', -1) # unix socket case if isinstance(exc, (InvalidRequestLine, InvalidRequestMethod, InvalidHTTPVersion, InvalidHeader, InvalidHeaderName, LimitRequestLine, LimitRequestHeaders, InvalidProxyLine, ForbiddenProxyRequest, SSLError)): status_int = 400 reason = "Bad Request" if isinstance(exc, InvalidRequestLine): mesg = "Invalid Request Line '%s'" % str(exc) elif isinstance(exc, InvalidRequestMethod): mesg = "Invalid Method '%s'" % str(exc) elif isinstance(exc, InvalidHTTPVersion): mesg = "Invalid HTTP Version '%s'" % str(exc) elif isinstance(exc, (InvalidHeaderName, InvalidHeader,)): mesg = "%s" % str(exc) if not req and hasattr(exc, "req"): req = exc.req # for access log elif isinstance(exc, LimitRequestLine): mesg = "%s" % str(exc) elif isinstance(exc, LimitRequestHeaders): mesg = "Error parsing headers: '%s'" % str(exc) elif isinstance(exc, InvalidProxyLine): mesg = "'%s'" % str(exc) elif isinstance(exc, ForbiddenProxyRequest): reason = "Forbidden" mesg = "Request forbidden" status_int = 403 elif isinstance(exc, SSLError): reason = "Forbidden" mesg = "'%s'" % str(exc) status_int = 403 msg = "Invalid request from ip={ip}: {error}" self.log.debug(msg.format(ip=addr[0], error=str(exc))) else: if hasattr(req, "uri"): self.log.exception("Error handling request %s", req.uri) status_int = 500 reason = "Internal Server Error" mesg = "" if req is not None: request_time = datetime.now() - request_start environ = default_environ(req, client, self.cfg) environ['REMOTE_ADDR'] = addr[0] environ['REMOTE_PORT'] = str(addr[1]) resp = Response(req, client, self.cfg) resp.status = "%s %s" % (status_int, reason) resp.response_length = len(mesg) self.log.access(resp, req, environ, request_time) try: util.write_error(client, status_int, reason, mesg) except: self.log.debug("Failed to send error message.")
def handle_error(self, req, client, addr, exc): request_start = datetime.now() addr = addr or ('', -1) # unix socket case if isinstance(exc, (InvalidRequestLine, InvalidRequestMethod, InvalidHTTPVersion, InvalidHeader, InvalidHeaderName, LimitRequestLine, LimitRequestHeaders,)): status_int = 400 reason = "Bad Request" if isinstance(exc, InvalidRequestLine): mesg = "<p>Invalid Request Line '%s'</p>" % str(exc) elif isinstance(exc, InvalidRequestMethod): mesg = "<p>Invalid Method '%s'</p>" % str(exc) elif isinstance(exc, InvalidHTTPVersion): mesg = "<p>Invalid HTTP Version '%s'</p>" % str(exc) elif isinstance(exc, (InvalidHeaderName, InvalidHeader,)): mesg = "<p>Invalid Header '%s'</p>" % str(exc) elif isinstance(exc, LimitRequestLine): mesg = "<p>%s</p>" % str(exc) elif isinstance(exc, LimitRequestHeaders): mesg = "<p>Error parsing headers: '%s'</p>" % str(exc) self.log.debug("Invalid request from ip={ip}: {error}"\ "".format(ip=addr[0], error=str(exc), ) ) else: self.log.exception("Error handling request") status_int = 500 reason = "Internal Server Error" mesg = "" if req is not None: request_time = datetime.now() - request_start environ = default_environ(req, client, self.cfg) environ['REMOTE_ADDR'] = addr[0] environ['REMOTE_PORT'] = str(addr[1]) resp = Response(req, client) resp.status = "%s %s" % (status_int, reason) resp.response_length = len(mesg) self.log.access(resp, req, environ, request_time) if self.debug: tb = traceback.format_exc() mesg += "<h2>Traceback:</h2>\n<pre>%s</pre>" % tb try: util.write_error(client, status_int, reason, mesg) except: self.log.debug("Failed to send error message.")
def handle_error(self, req, client, addr, exc): request_start = datetime.now() if isinstance(exc, (InvalidRequestLine, InvalidRequestMethod, InvalidHTTPVersion, InvalidHeader, InvalidHeaderName, LimitRequestLine, LimitRequestHeaders,)): status_int = 400 reason = "Bad Request" if isinstance(exc, InvalidRequestLine): mesg = "<p>Invalid Request Line '%s'</p>" % str(exc) elif isinstance(exc, InvalidRequestMethod): mesg = "<p>Invalid Method '%s'</p>" % str(exc) elif isinstance(exc, InvalidHTTPVersion): mesg = "<p>Invalid HTTP Version '%s'</p>" % str(exc) elif isinstance(exc, (InvalidHeaderName, InvalidHeader,)): mesg = "<p>Invalid Header '%s'</p>" % str(exc) elif isinstance(exc, LimitRequestLine): mesg = "<p>%s</p>" % str(exc) elif isinstance(exc, LimitRequestHeaders): mesg = "<p>Error parsing headers: '%s'</p>" % str(exc) self.log.debug("Invalid request from ip={ip}: {error}"\ "".format(ip=client.getpeername()[0], error=repr(exc), ) ) else: self.log.exception("Error handling request") status_int = 500 reason = "Internal Server Error" mesg = "" if req is not None: request_time = datetime.now() - request_start environ = default_environ(req, client, self.cfg) environ['REMOTE_ADDR'] = addr[0] environ['REMOTE_PORT'] = str(addr[1]) resp = Response(req, client) resp.status = "%s %s" % (status_int, reason) resp.response_length = len(mesg) self.log.access(resp, req, environ, request_time) if self.debug: tb = traceback.format_exc() mesg += "<h2>Traceback:</h2>\n<pre>%s</pre>" % tb try: util.write_error(client, status_int, reason, mesg) except: self.log.warning("Failed to send error message.")
def handle_error(self, req, client, addr, exc): request_start = datetime.now() addr = addr or ('', -1) # unix socket case if isinstance(exc, ( InvalidRequestLine, InvalidRequestMethod, InvalidHTTPVersion, InvalidHeader, InvalidHeaderName, LimitRequestLine, LimitRequestHeaders, InvalidProxyLine, ForbiddenProxyRequest, )): status_int = 400 reason = "Bad Request" if isinstance(exc, InvalidRequestLine): mesg = "<p>Invalid Request Line '%s'</p>" % str(exc) elif isinstance(exc, InvalidRequestMethod): mesg = "<p>Invalid Method '%s'</p>" % str(exc) elif isinstance(exc, InvalidHTTPVersion): mesg = "<p>Invalid HTTP Version '%s'</p>" % str(exc) elif isinstance(exc, ( InvalidHeaderName, InvalidHeader, )): mesg = "<p>%s</p>" % str(exc) if not req and hasattr(exc, "req"): req = exc.req # for access log elif isinstance(exc, LimitRequestLine): mesg = "<p>%s</p>" % str(exc) elif isinstance(exc, LimitRequestHeaders): mesg = "<p>Error parsing headers: '%s'</p>" % str(exc) elif isinstance(exc, InvalidProxyLine): mesg = "<p>'%s'</p>" % str(exc) elif isinstance(exc, ForbiddenProxyRequest): reason = "Forbidden" mesg = "<p>Request forbidden</p>" status_int = 403 self.log.debug("Invalid request from ip={ip}: {error}"\ "".format(ip=addr[0], error=str(exc), ) ) elif isinstance(exc, socket.timeout): status_int = 408 reason = "Request Timeout" mesg = "<p>The server timed out handling for the request</p>" else: self.log.exception("Error handling request") status_int = 500 reason = "Internal Server Error" mesg = "" if req is not None: request_time = datetime.now() - request_start environ = default_environ(req, client, self.cfg) environ['REMOTE_ADDR'] = addr[0] environ['REMOTE_PORT'] = str(addr[1]) resp = Response(req, client) resp.status = "%s %s" % (status_int, reason) resp.response_length = len(mesg) self.log.access(resp, req, environ, request_time) if self.debug: tb = traceback.format_exc() mesg += "<h2>Traceback:</h2>\n<pre>%s</pre>" % tb try: util.write_error(client, status_int, reason, mesg) except: self.log.debug("Failed to send error message.")