(f: flow.Flow)
| 61 | |
| 62 | |
| 63 | def curl_command(f: flow.Flow) -> str: |
| 64 | request = cleanup_request(f) |
| 65 | pop_headers(request) |
| 66 | |
| 67 | args = ["curl"] |
| 68 | |
| 69 | server_addr = f.server_conn.peername[0] if f.server_conn.peername else None |
| 70 | |
| 71 | if ( |
| 72 | ctx.options.export_preserve_original_ip |
| 73 | and server_addr |
| 74 | and request.pretty_host != server_addr |
| 75 | ): |
| 76 | resolve = f"{request.pretty_host}:{request.port}:[{server_addr}]" |
| 77 | args.append("--resolve") |
| 78 | args.append(resolve) |
| 79 | |
| 80 | for k, v in request.headers.items(multi=True): |
| 81 | if k.lower() == "accept-encoding": |
| 82 | args.append("--compressed") |
| 83 | else: |
| 84 | args += ["-H", f"{k}: {v}"] |
| 85 | |
| 86 | if request.method != "GET": |
| 87 | if not request.content: |
| 88 | # curl will not calculate content-length if there is no content |
| 89 | # some server/verb combinations require content-length headers |
| 90 | # (ex. nginx and POST) |
| 91 | args += ["-H", "content-length: 0"] |
| 92 | |
| 93 | args += ["-X", request.method] |
| 94 | |
| 95 | args.append(request.pretty_url) |
| 96 | |
| 97 | command = " ".join(shlex.quote(arg) for arg in args) |
| 98 | if request.content: |
| 99 | command += f" -d {request_content_for_console(request)}" |
| 100 | return command |
| 101 | |
| 102 | |
| 103 | def httpie_command(f: flow.Flow) -> str: |
no test coverage detected
searching dependent graphs…