diff options
| -rw-r--r-- | mitmproxy/addons/export.py | 24 | ||||
| -rw-r--r-- | test/mitmproxy/addons/test_export.py | 24 | 
2 files changed, 22 insertions, 26 deletions
diff --git a/mitmproxy/addons/export.py b/mitmproxy/addons/export.py index 90e95d3e..2776118a 100644 --- a/mitmproxy/addons/export.py +++ b/mitmproxy/addons/export.py @@ -11,17 +11,23 @@ import mitmproxy.types  import pyperclip -def raise_if_missing_request(f: flow.Flow) -> None: +def cleanup_request(f: flow.Flow):      if not hasattr(f, "request"):          raise exceptions.CommandError("Can't export flow with no request.") +    request = f.request.copy()  # type: ignore +    request.decode(strict=False) +    # a bit of clean-up +    if request.method == 'GET' and request.headers.get("content-length", None) == "0": +        request.headers.pop('content-length') +    request.headers.pop(':authority', None) +    return request  def curl_command(f: flow.Flow) -> str: -    raise_if_missing_request(f)      data = "curl " -    request = f.request.copy()  # type: ignore -    request.decode(strict=False) +    request = cleanup_request(f)      for k, v in request.headers.items(multi=True): +        data += "--compressed " if k == 'accept-encoding' else ""          data += "-H '%s:%s' " % (k, v)      if request.method != "GET":          data += "-X %s " % request.method @@ -35,11 +41,8 @@ def curl_command(f: flow.Flow) -> str:  def httpie_command(f: flow.Flow) -> str: -    raise_if_missing_request(f) -    request = f.request.copy()  # type: ignore -    data = "http %s " % request.method -    request.decode(strict=False) -    data += "%s" % request.url +    request = cleanup_request(f) +    data = "http %s %s" % (request.method, request.url)      for k, v in request.headers.items(multi=True):          data += " '%s:%s'" % (k, v)      if request.content: @@ -51,8 +54,7 @@ def httpie_command(f: flow.Flow) -> str:  def raw(f: flow.Flow) -> bytes: -    raise_if_missing_request(f) -    return assemble.assemble_request(f.request)  # type: ignore +    return assemble.assemble_request(cleanup_request(f))  # type: ignore  formats = dict( diff --git a/test/mitmproxy/addons/test_export.py b/test/mitmproxy/addons/test_export.py index f4bb0f64..c86e0c7d 100644 --- a/test/mitmproxy/addons/test_export.py +++ b/test/mitmproxy/addons/test_export.py @@ -14,29 +14,23 @@ from unittest import mock  @pytest.fixture  def get_request():      return tflow.tflow( -        req=tutils.treq( -            method=b'GET', -            content=b'', -            path=b"/path?a=foo&a=bar&b=baz" -        ) -    ) +        req=tutils.treq(method=b'GET', content=b'', path=b"/path?a=foo&a=bar&b=baz"))  @pytest.fixture  def post_request():      return tflow.tflow( -        req=tutils.treq( -            method=b'POST', -            headers=(), -            content=bytes(range(256)) -        ) -    ) +        req=tutils.treq(method=b'POST', headers=(), content=bytes(range(256))))  @pytest.fixture  def patch_request():      return tflow.tflow( -        req=tutils.treq(method=b'PATCH', path=b"/path?query=param") +        req=tutils.treq( +            method=b'PATCH', +            content=b'content', +            path=b"/path?query=param" +        )      ) @@ -47,7 +41,7 @@ def tcp_flow():  class TestExportCurlCommand:      def test_get(self, get_request): -        result = """curl -H 'header:qvalue' -H 'content-length:0' 'http://address:22/path?a=foo&a=bar&b=baz'""" +        result = """curl -H 'header:qvalue' 'http://address:22/path?a=foo&a=bar&b=baz'"""          assert export.curl_command(get_request) == result      def test_post(self, post_request): @@ -67,7 +61,7 @@ class TestExportCurlCommand:  class TestExportHttpieCommand:      def test_get(self, get_request): -        result = """http GET http://address:22/path?a=foo&a=bar&b=baz 'header:qvalue' 'content-length:0'""" +        result = """http GET http://address:22/path?a=foo&a=bar&b=baz 'header:qvalue'"""          assert export.httpie_command(get_request) == result      def test_post(self, post_request):  | 
