def extract_request_body(requests_text: str):
    """
    Parse change requests, a text of RPSL objects along with metadata like
    passwords or deletion requests.
    Returns a dict suitable as a JSON HTTP POST payload.
    """
    passwords = []
    overrides = []
    rpsl_texts = []
    delete_reason = ""

    requests_text = requests_text.replace("\r", "")
    for object_text in requests_text.split("\n\n"):
        object_text = object_text.strip()
        if not object_text:
            continue

        rpsl_text = ""

        # The attributes password/override/delete are meta attributes
        # and need to be extracted before parsing. Delete refers to a specific
        # object, password/override apply to all included objects.
        for line in object_text.strip("\n").split("\n"):
            if line.startswith("password:"):
                password = line.split(":", maxsplit=1)[1].strip()
                passwords.append(password)
            elif line.startswith("override:"):
                override = line.split(":", maxsplit=1)[1].strip()
                overrides.append(override)
            elif line.startswith("delete:"):
                delete_reason = line.split(":", maxsplit=1)[1].strip()
            else:
                rpsl_text += line + "\n"

        if rpsl_text:
            rpsl_texts.append(rpsl_text)

    result = {
        "objects": [{"object_text": rpsl_text} for rpsl_text in rpsl_texts],
        "passwords": passwords,
        "overrides": overrides,
        "delete_reason": delete_reason,
    }
    return result