update raw export to not remove headers (#4181)

This commit is contained in:
Chase Kelley 2020-08-28 06:41:22 -04:00 committed by GitHub
parent f1287012b4
commit 2aacf94a63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 1 deletions

View File

@ -11,6 +11,7 @@ Unreleased: mitmproxy next
* Display HTTP trailers in mitmweb (@sanlengjingvv) * Display HTTP trailers in mitmweb (@sanlengjingvv)
* Revamp onboarding app (@mhils) * Revamp onboarding app (@mhils)
* Add ASGI support for embedded apps (@mhils) * Add ASGI support for embedded apps (@mhils)
* Updated raw exports to not remove headers (@wchasekelley)
* --- TODO: add new PRs above this line --- * --- TODO: add new PRs above this line ---

View File

@ -18,7 +18,11 @@ def cleanup_request(f: flow.Flow) -> http.HTTPRequest:
assert isinstance(f, http.HTTPFlow) assert isinstance(f, http.HTTPFlow)
request = f.request.copy() request = f.request.copy()
request.decode(strict=False) request.decode(strict=False)
# a bit of clean-up - these headers should be automatically set by curl/httpie return request
def pop_headers(request: http.HTTPRequest) -> http.HTTPRequest:
# Remove some headers that are redundant for curl/httpie export
request.headers.pop('content-length') request.headers.pop('content-length')
if request.headers.get("host", "") == request.host: if request.headers.get("host", "") == request.host:
request.headers.pop("host") request.headers.pop("host")
@ -53,6 +57,7 @@ def request_content_for_console(request: http.HTTPRequest) -> str:
def curl_command(f: flow.Flow) -> str: def curl_command(f: flow.Flow) -> str:
request = cleanup_request(f) request = cleanup_request(f)
request = pop_headers(request)
args = ["curl"] args = ["curl"]
for k, v in request.headers.items(multi=True): for k, v in request.headers.items(multi=True):
if k.lower() == "accept-encoding": if k.lower() == "accept-encoding":
@ -70,6 +75,7 @@ def curl_command(f: flow.Flow) -> str:
def httpie_command(f: flow.Flow) -> str: def httpie_command(f: flow.Flow) -> str:
request = cleanup_request(f) request = cleanup_request(f)
request = pop_headers(request)
args = ["http", request.method, request.url] args = ["http", request.method, request.url]
for k, v in request.headers.items(multi=True): for k, v in request.headers.items(multi=True):
args.append(f"{k}: {v}") args.append(f"{k}: {v}")

View File

@ -144,6 +144,7 @@ class TestRaw:
def test_get_request_present(self, get_request): def test_get_request_present(self, get_request):
assert b"header: qvalue" in export.raw(get_request) assert b"header: qvalue" in export.raw(get_request)
assert b"content-length: 0" in export.raw_request(get_request)
def test_get_response_present(self, get_response): def test_get_response_present(self, get_response):
delattr(get_response, 'request') delattr(get_response, 'request')
@ -163,6 +164,7 @@ class TestRaw:
class TestRawRequest: class TestRawRequest:
def test_get(self, get_request): def test_get(self, get_request):
assert b"header: qvalue" in export.raw_request(get_request) assert b"header: qvalue" in export.raw_request(get_request)
assert b"content-length: 0" in export.raw_request(get_request)
def test_no_request(self, get_response): def test_no_request(self, get_response):
delattr(get_response, 'request') delattr(get_response, 'request')