Пример #1
0
    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)
Пример #2
0
    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)