def send_headers(self, headers, end_headers=True, cookies=True): """ Write a dictionary of HTTP headers to the client. ============ ======== ============ Argument Default Description ============ ======== ============ headers A dictionary of HTTP headers. end_headers True *Optional.* If this is set to True, a double CRLF sequence will be written at the end of the cookie headers, signifying the end of the HTTP headers segment and the beginning of the response. cookies True *Optional.* If this is set to True, HTTP cookies will be sent along with the headers. ============ ======== ============ """ self._started = True out = [] append = out.append if isinstance(headers, (tuple, list)): hv = headers headers = [] for key, val in hv: headers.append(key.lower()) append('%s: %s' % (key, val)) else: hv = headers headers = [] for key in hv: headers.append(key.lower()) val = hv[key] if type(val) is list: for v in val: append('%s: %s' % (key, v)) else: append('%s: %s' % (key, val)) if not 'date' in headers and self.protocol == 'HTTP/1.1': append('Date: %s' % date(datetime.utcnow())) if not 'server' in headers: append('Server: %s' % SERVER) if cookies and hasattr(self, '_cookies_out'): self.send_cookies() if end_headers: append(CRLF) else: append('') self.connection.write(CRLF.join(out))
def send_headers(self, headers, end_headers=True, cookies=True): """ Write a dictionary of HTTP headers to the client. ============ ======== ============ Argument Default Description ============ ======== ============ headers A dictionary of HTTP headers. end_headers True *Optional.* If this is set to True, a double CRLF sequence will be written at the end of the cookie headers, signifying the end of the HTTP headers segment and the beginning of the response. cookies True *Optional.* If this is set to True, HTTP cookies will be sent along with the headers. ============ ======== ============ """ self._started = True out = [] append = out.append if isinstance(headers, (tuple,list)): hv = headers headers = [] for key, val in hv: headers.append(key.lower()) append('%s: %s' % (key, val)) else: hv = headers headers = [] for key in hv: headers.append(key.lower()) val = hv[key] if type(val) is list: for v in val: append('%s: %s' % (key, v)) else: append('%s: %s' % (key, val)) if not 'date' in headers and self.protocol == 'HTTP/1.1': append('Date: %s' % date(datetime.utcnow())) if not 'server' in headers: append('Server: %s' % SERVER) if cookies and hasattr(self, '_cookies_out'): self.send_cookies() if end_headers: append(CRLF) else: append('') self.connection.write(CRLF.join(out))
def send_cookies(self, keys=None, end_headers=False): """ Write any cookies associated with the request to the client. If any keys are specified, only the cookies with the specified keys will be transmitted. Otherwise, all cookies in :attr:`cookies_out` will be written to the client. This function is usually called automatically by send_headers. ============ ======== ============ Argument Default Description ============ ======== ============ keys None *Optional.* A list of cookie names to send. end_headers False *Optional.* If this is set to True, a double CRLF sequence will be written at the end of the cookie headers, signifying the end of the HTTP headers segment and the beginning of the response. ============ ======== ============ """ self._started = True if keys is None: if hasattr(self, '_cookies_out'): out = self.cookies_out.output() else: out = '' else: out = [] for k in keys: if not k in self.cookies_out: continue out.append(self.cookies_out[k].output()) out = CRLF.join(out) if not out.endswith(CRLF): out += CRLF if end_headers: self.connection.write('%s%s' % (out, CRLF)) else: self.connection.write(out)