示例#1
0
def validate_request_form(mode, request):
    if request.first_line_format == "absolute" and request.scheme != "http":
        raise exceptions.HttpException("Invalid request scheme: %s" %
                                       request.scheme)
    allowed_request_forms = MODE_REQUEST_FORMS[mode]
    if request.first_line_format not in allowed_request_forms:
        err_message = "Invalid HTTP request form (expected: %s, got: %s)" % (
            " or ".join(allowed_request_forms), request.first_line_format)
        raise exceptions.HttpException(err_message)
示例#2
0
 def send_response(self, response):
     if response.data.content is None:
         raise exceptions.HttpException(
             "Cannot assemble flow with missing content")
     self.send_response_headers(response)
     self.send_response_body(response, [response.data.content])
     self.send_response_trailers(response)
示例#3
0
def validate_request_form(mode, request):
    if request.first_line_format == "absolute" and request.scheme != "http":
        raise exceptions.HttpException("Invalid request scheme: %s" %
                                       request.scheme)
    allowed_request_forms = MODE_REQUEST_FORMS[mode]
    if request.first_line_format not in allowed_request_forms:
        if mode == HTTPMode.transparent:
            err_message = (
                "Mitmproxy received an {} request even though it is not running in regular mode. "
                "This usually indicates a misconfiguration, please see "
                "http://docs.mitmproxy.org/en/stable/modes.html for details."
            ).format("HTTP CONNECT" if request.first_line_format ==
                     "authority" else "absolute-form")
        else:
            err_message = "Invalid HTTP request form (expected: %s, got: %s)" % (
                " or ".join(allowed_request_forms), request.first_line_format)
        raise exceptions.HttpException(err_message)
示例#4
0
    def validate_request(self, request):
        if request.first_line_format == "absolute" and request.scheme != "http":
            raise exceptions.HttpException("Invalid request scheme: %s" % request.scheme)

        expected_request_forms = {
            "regular": ("authority", "absolute",),
            "upstream": ("authority", "absolute"),
            "transparent": ("relative",)
        }

        allowed_request_forms = expected_request_forms[self.mode]
        if request.first_line_format not in allowed_request_forms:
            err_message = "Invalid HTTP request form (expected: %s, got: %s)" % (
                " or ".join(allowed_request_forms), request.first_line_format
            )
            raise exceptions.HttpException(err_message)

        if self.mode == "regular" and request.first_line_format == "absolute":
            request.first_line_format = "relative"
示例#5
0
def validate_request_form(mode, request):
    if request.first_line_format == "absolute" and request.scheme not in (
            "http", "https"):
        raise exceptions.HttpException("Invalid request scheme: %s" %
                                       request.scheme)
    allowed_request_forms = MODE_REQUEST_FORMS[mode]
    if request.first_line_format not in allowed_request_forms:
        if request.is_http2 and mode is HTTPMode.transparent and request.first_line_format == "absolute":
            return  # dirty hack: h2 may have authority info. will be fixed properly with sans-io.
        if mode == HTTPMode.transparent:
            err_message = textwrap.dedent("""
                Mitmproxy received an {} request even though it is not running
                in regular mode. This usually indicates a misconfiguration,
                please see the mitmproxy mode documentation for details.
                """).strip().format("HTTP CONNECT" if request.first_line_format
                                    == "authority" else "absolute-form")
        else:
            err_message = "Invalid HTTP request form (expected: {}, got: {})".format(
                " or ".join(allowed_request_forms), request.first_line_format)
        raise exceptions.HttpException(err_message)