Beispiel #1
0
    def _read_request_header(self):
        '''Read the request header.

        Returns:
            Request: A request.
        '''
        request_header_data = yield self._io_stream.read_until_regex(
            br'\r?\n\r?\n')
        status_line, header = request_header_data.split(b'\n', 1)
        method, url, version = Request.parse_status_line(status_line)

        if method == 'CONNECT':
            _logger.warning('Proxy does not support CONNECT.')
            self._io_stream.close()
            return

        if self._rewrite and url.endswith('/WPULLHTTPS'):
            url = url[:-11].replace('http://', 'https://', 1)

        request = Request.new(url, method, url_encoding='latin-1')
        request.version = version

        _logger.debug('Read request {0} {1}.'.format(
            method, url)
        )

        old_host_value = request.fields.pop('Host')

        request.fields.parse(header, strict=False)

        if 'Host' not in request.fields:
            request.fields['Host'] = old_host_value

        if self._rewrite \
           and request.fields['Host'].startswith('wpull.invalid'):
            request.fields['Host'] = request.url_info.hostname_with_port
            assert request.fields['Host']

        raise tornado.gen.Return(request)
Beispiel #2
0
    def _read_request_header(self):
        '''Read the request header.

        Returns:
            Request: A request.
        '''
        request_header_data = yield self._io_stream.read_until_regex(
            br'\r?\n\r?\n')
        status_line, header = request_header_data.split(b'\n', 1)
        method, url, version = Request.parse_status_line(status_line)

        if method == 'CONNECT':
            _logger.warning('Proxy does not support CONNECT.')
            self._io_stream.close()
            return

        if self._rewrite and url.startswith('http://wpull.invalid/'):
            url = url.replace('http://wpull.invalid/', '', 1)

        request = Request.new(url, method, url_encoding='latin-1')
        request.version = version

        _logger.debug('Read request {0} {1}.'.format(
            method, url)
        )

        old_host_value = request.fields.pop('Host')

        request.fields.parse(header, strict=False)

        if 'Host' not in request.fields:
            request.fields['Host'] = old_host_value

        if self._rewrite and request.fields['Host'] == 'wpull.invalid':
            request.fields['Host'] = request.url_info.hostname
            assert request.fields['Host']

        raise tornado.gen.Return(request)