rendered paste bodyfrom httplib import responsesclass _HeaderContainer: _container = {} def add_header(self, header, value): if not header in self._container: self._container[header] = [] self._container[header].append(value) def set_header(self, header, value): if header in self._container: del self._container[header] self.add_header(header, value) def get_header(self, header): if not header in self._container: return None if len(self._container[header]) > 1: return self.get_headers(header) return self._container[header][0] def get_headers(self, header): if not header in self._container: return [] return self._container[header] def http_headers(self): httph = [] for header in self._container: for value in self.get_headers(header): httph.append("%s: %s" % (header, value)) return httph def http_response(self): return '\n'.join(self.http_headers())class Response: _mime = "text/html" _headers = HeaderContainer() _response = "" def __init__(self, request, code, content, message=None): if not message: if code in responses: message = responses[code] else: message = 'Unknown' self._request = request self._rescode = code self._content = str(content) self._message = message def get_response(self): self._create_response() return self._response def _create_response(self): self._send_raw("%s %d %s" % (self._request.server.protocol, self._rescode, self._message)) self.set_header('Server', self._request.server.version) self.set_header('Date', self._request.server.date) self.set_header('Content-Type', self._mime) self.set_header('Content-Length', len(self._content)) self._send_headers() self._end_headers() self._send_body() def add_header(self, header, value): self._headers.add_header(header, value) def set_header(self, header, value): self._headers.set_header(header, value) def get_header(self, header): return self._headers.get_header(header) def get_headers(self, header): return self._headers.get_headers(header) def set_mimetype(self, mime): self._mime = mime def get_mimetype(self): return self._mime def _send_raw(self, data): self._response += data+"\n" def _send_headers(self): self._send_raw(self._headers.http_response()) def _end_headers(self): self._send_raw("") def _send_body(self): self._send_raw(self._content)def send(response): print response.get_response(),