Pular para o conteúdo

Modelo de execução

Cada requisição pode carregar dois snippets opcionais de JavaScript:

  • Um pre-request script roda antes de a requisição ser enviada. Ele pode ler e modificar o método, a URL, o body e os cabeçalhos da requisição; ler e escrever variáveis de ambiente; emitir logs; e definir tests.
  • Um post-response script roda depois que a resposta chega. Ele pode ler a resposta (status, cabeçalhos, body, timing, tamanho, JSON/XML parseado), ler e escrever variáveis de ambiente, logar e rodar tests. Ele não pode modificar a requisição — esse trem já passou.

Os scripts são escritos em JavaScript e rodam dentro de um sandbox isolado e síncrono. Eles têm acesso a um único global, fp.

O sandbox protege contra footguns acidentais — APIs assíncronas, loops descontrolados, imports de Node por engano — mas não foi projetado para conter um script malicioso. Trate um arquivo .http de uma fonte não confiável como você trataria um script de shell da mesma fonte: leia antes de rodar.

MembroFasesPropósito
fp.request.method / url / bodypre: leitura/escrita · post: somente leituraMutar a requisição em andamento antes do envio.
fp.request.headers.get/getAll/set/add/remove/count/toObjectpre: completo · post: somente leituraAcesso a cabeçalhos case-insensitive. getAll / add / count reconhecem duplicados (leem ou escrevem nomes repetidos); toObject perde informação.
fp.response.status / statusText / body / timingMs / sizeBytessomente postCampos de resposta somente leitura. sizeBytes é medido depois de decodificar uma resposta comprimida.
fp.response.decodingStatussomente postResultado da decodificação do body conforme Content-Encoding: 'decoded', 'not-required', 'unsupported' ou 'failed' (nos dois últimos, o body fica como recebido).
fp.response.headers.get/getAll/count/toObjectsomente postCabeçalhos de resposta somente leitura. getAll / count expõem duplicados (p. ex. Set-Cookie).
fp.response.json()somente postParseia o body como JSON (limite de 10 MB). Lança erro quando o body não pôde ser decodificado.
fp.response.xml2Json(options?)somente postParseia o body como XML em uma árvore de objetos (limite de 10 MB). Lança erro quando o body não pôde ser decodificado.
fp.environment.get/set/remove/toObjectambasLê/escreve o ambiente persistido.
fp.variables.get/setambasLê/escreve variáveis efêmeras por envio.
fp.test(name, fn)ambasDefine uma asserção de test.
fp.expect(value)ambasAsserções fluentes no estilo Chai.
fp.log/warn/error(...)ambasCaptura linhas de log (também expostas via console.log/warn/error).

O sandbox é deliberadamente restrito. O seguinte não está disponível de propósito:

  • Promises, async/await, setTimeout, setInterval, queueMicrotask ou qualquer outra primitiva assíncrona — os scripts devem terminar de forma síncrona.
  • eval(), new Function(), compilação de WebAssembly.
  • Acesso a filesystem, rede, SO ou ambiente.
  • Globais do DOM, internals do runtime ou qualquer API de extensão.

Scripts CPU-bound são interrompidos abruptamente em 5 segundos. Os parsers de JSON e XML limitam sua entrada em 10 MB cada um, para que uma resposta gigante não trave o app.