Files
fn_registry/python/functions/cybersecurity/har_extract_calls.md
T
egutierrez 8742cb25be feat(browser): auto-commit con 60 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 11:42:31 +02:00

4.2 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
har_extract_calls function py cybersecurity 1.0.0 pure def har_extract_calls(entries: list[dict], *, drop_headers: list[str] | None = None) -> list[dict] Normaliza una lista de entries HAR (salida de har_filter_flows) en call specs reproducibles: extrae cookies del header Cookie, limpia headers hop-by-hop, infiere body_type y expone los datos de auth para parametrizar luego con {{param}}. Segundo paso del patron grabar->destilar->reproducir un flujo web. NO auto-parametriza.
flow-replay
har
http
proxy
cybersecurity
python
false
name desc
entries lista de entries HAR (cada uno con request y, opcional, response). Tipicamente la salida de har_filter_flows.
name desc
drop_headers nombres extra de headers a eliminar (case-insensitive), aparte de los hop-by-hop por defecto. None = no quitar extras.
lista de call specs (una por entry) con claves: method (upper), url, headers (sin hop-by-hop ni Cookie), cookies (parseadas del header Cookie), body, body_type (json|form|raw|None), status (int|None), sets_cookies (nombres de cookies que setea la respuesta) true
test_golden_post_con_cookie_y_body_json
test_edge_get_sin_body
test_drop_headers_extra_respetado
test_form_body_y_set_cookie_desde_headers
test_lista_vacia
python/functions/cybersecurity/har_extract_calls_test.py python/functions/cybersecurity/har_extract_calls.py

Ejemplo

from har_extract_calls import har_extract_calls

entries = [
    {
        "request": {
            "method": "post",
            "url": "https://api.example.com/login",
            "headers": [
                {"name": "Host", "value": "api.example.com"},
                {"name": "Content-Type", "value": "application/json"},
                {"name": "Cookie", "value": "session=abc; csrf=xyz"},
            ],
            "postData": {
                "mimeType": "application/json",
                "text": '{"user":"neo","pass":"secret"}',
            },
        },
        "response": {"status": 200, "cookies": [{"name": "session", "value": "new"}]},
    }
]

har_extract_calls(entries)
# [{
#     "method": "POST",
#     "url": "https://api.example.com/login",
#     "headers": {"Content-Type": "application/json"},   # Host (hop-by-hop) y Cookie removidos
#     "cookies": {"session": "abc", "csrf": "xyz"},      # parseadas del header Cookie
#     "body": '{"user":"neo","pass":"secret"}',
#     "body_type": "json",                               # inferido del mimeType
#     "status": 200,
#     "sets_cookies": ["session"],                       # cookies que setea la respuesta
# }]

Cuando usarla

Usala tras har_filter_flows, una vez tienes los entries HAR del flujo que te interesa, para obtener el boceto normalizado de los requests. Las call specs resultantes son el punto de partida para: (1) marcar a mano los valores dinamicos con {{param}} y guardar el flujo como funcion-accion del registry, o (2) reproducir la secuencia con http_replay_sequence_py_infra. Tambien para auditar rapido que cookies/headers de auth lleva cada peticion de un flujo capturado.

Gotchas

  • NO auto-parametriza. Deja todos los valores tal cual aparecen en el HAR. La deteccion de CSRF tokens, anti-forgery y otros valores dinamicos es responsabilidad del humano/Claude, que los marca despues con {{param}}. La auto-deteccion es v2, fuera de scope.
  • El output contiene secretos. Las cookies de sesion, tokens Authorization y demas auth del HAR viajan tal cual en las call specs. NO commitear el output crudo ni pegarlo en sitios publicos: redactar/parametrizar antes de persistir.
  • Headers hop-by-hop se descartan siempre (host, content-length, connection, keep-alive, proxy-connection, accept-encoding, te, trailer, transfer-encoding, upgrade). Si necesitas conservar alguno para reproducir un caso especial, tendras que reañadirlo manualmente en la call spec.
  • El header Cookie se mueve a cookies y desaparece de headers: al reproducir, el cliente HTTP debe re-serializar las cookies (no asumir que siguen en headers).