def __init__(self,server,sock,client_address): self.server = server self.client_address = client_address self.sock = sock self.keep_alive = True # buffer for incoming data (HTTP request + post data) self.incoming = cStringIO.StringIO() self.writable = False # set to True when processing is done self.request_complete = False self.init_info() # default values self.config = k_config.get_host_conf(None) self.protocol = ""
def process_request(self): import k_target # initialise namespace self.ns = { "REQUEST_HANDLER": self, "SCRIPT_END": SCRIPT_END, "HTTP_REDIRECTION": HTTP_REDIRECTION, "Session": self.Session, "Role": self.get_log_level, "PRINT": self._print, "STDOUT": self._sys_stdout, "LOG": self._log, } self.output = cStringIO.StringIO() info = self.info # defaults # nedd add by B.Z, 2010.05.23 ########################################## reload(sys) sys.setdefaultencoding("utf8") ########################################## self.output_encoding = sys.getdefaultencoding() self.resp_headers = email.message_from_string("") self.cookies = {} # keep connection alive after this request ? conn_header = self.headers.get("connection", "") self.keep_alive = (self.protocol == "HTTP/1.1") and (conn_header.lower().startswith("keep-alive")) # set host-specific configuration self.host = self.headers.get("host", None) # hook "host_filter" try: self.hook("host_filter") self.config = k_config.get_host_conf(self.host) except HTTP_REDIRECTION, url: self.redirect(url) self._log(info, 302, url) return
def read_request(self): # read request lines # set default values self.protocol = "" self.resp_headers = {} self.cookies = {} self.header_text = "" self.config = k_config.get_host_conf(None) # initialize log info info = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S - ") info += str(self.client_address[0]) + (" - ") info += self.request_line.strip() self.info = info # read headers while True: line = self.rfile.readline(size=8192) if len(line) == 8192: return False # too long line = attack self.header_text += line if not line.strip(): break return self.parse_request()