def send(self, status, fields=None, content=None, version=None): if fields is None: fields = { } elif not isinstance(fields, HttpFields): fields = HttpFields(fields) if content is None: content = b'' if version is None: version = self.version assert version in (HTTP_10, HTTP_11), "invalid http version: %s" % version fields.setdefault('Content-Length', six.text_type(len(content))) if self.server is not None: fields.setdefault('Server', self.server) if isinstance(status, int): status = '%s %s' % (status, reasons[status]) header = '' header += '%s %s\r\n' % (version, status) header += ''.join('%s: %s\r\n' % (k, v) for k, v in six.iteritems(fields)) header += '\r\n' header = header.encode('utf-8') return self.socket.sendall(header + content)
def send(self, method, path, query=None, fragment=None, fields=None, content=None, version=None): if fields is None: fields = HttpFields() elif not isinstance(fields, HttpFields): fields = HttpFields(fields) if query is None: query = { } if content is None: content = b'' if version is None: version = self.version assert version in (HTTP_10, HTTP_11), "invalid http version: %s" % version fields.setdefault('Content-Length', six.text_type(len(content))) fields.setdefault('Host', self.host) for k, v in six.iteritems(dict(query)): query[k] = format_query_value(v) if six.PY3: query = urlencode(query, encoding='utf-8') else: query = urlencode(query) header = '' header += method header += ' ' header += urlunparse(('', '', path, '', query, fragment if bool(fragment) else '')) header += ' %s\r\n' % version header += ''.join('%s: %s\r\n' % (k, v) for k, v in six.iteritems(fields)) header += '\r\n' header = header.encode('utf-8') self.socket.sendall(header + content)