Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
assemble.py100 linesDownload Raw Back to http1
1def assemble_request(request):2    if request.data.content is None:3        raise ValueError("Cannot assemble flow with missing content")4    head = assemble_request_head(request)5    body = b"".join(6        assemble_body(7            request.data.headers, [request.data.content], request.data.trailers8        )9    )10    return head + body11 12 13def assemble_request_head(request):14    first_line = _assemble_request_line(request.data)15    headers = _assemble_request_headers(request.data)16    return b"%s\r\n%s\r\n" % (first_line, headers)17 18 19def assemble_response(response):20    if response.data.content is None:21        raise ValueError("Cannot assemble flow with missing content")22    head = assemble_response_head(response)23    body = b"".join(24        assemble_body(25            response.data.headers, [response.data.content], response.data.trailers26        )27    )28    return head + body29 30 31def assemble_response_head(response):32    first_line = _assemble_response_line(response.data)33    headers = _assemble_response_headers(response.data)34    return b"%s\r\n%s\r\n" % (first_line, headers)35 36 37def assemble_body(headers, body_chunks, trailers):38    if "chunked" in headers.get("transfer-encoding", "").lower():39        for chunk in body_chunks:40            if chunk:41                yield b"%x\r\n%s\r\n" % (len(chunk), chunk)42        if trailers:43            yield b"0\r\n%s\r\n" % trailers44        else:45            yield b"0\r\n\r\n"46    else:47        if trailers:48            raise ValueError(49                "Sending HTTP/1.1 trailer headers requires transfer-encoding: chunked"50            )51        for chunk in body_chunks:52            yield chunk53 54 55def _assemble_request_line(request_data):56    """57    Args:58        request_data (mitmproxy.net.http.request.RequestData)59    """60    if request_data.method.upper() == b"CONNECT":61        return b"%s %s %s" % (62            request_data.method,63            request_data.authority,64            request_data.http_version,65        )66    elif request_data.authority:67        return b"%s %s://%s%s %s" % (68            request_data.method,69            request_data.scheme,70            request_data.authority,71            request_data.path,72            request_data.http_version,73        )74    else:75        return b"%s %s %s" % (76            request_data.method,77            request_data.path,78            request_data.http_version,79        )80 81 82def _assemble_request_headers(request_data):83    """84    Args:85        request_data (mitmproxy.net.http.request.RequestData)86    """87    return bytes(request_data.headers)88 89 90def _assemble_response_line(response_data):91    return b"%s %d %s" % (92        response_data.http_version,93        response_data.status_code,94        response_data.reason,95    )96 97 98def _assemble_response_headers(response):99    return bytes(response.headers)100 
codekingpro/portable-devtools · Team Ai