API HTTP
As utilidades de cliente HTTP estão disponíveis em ptool.http e p.http.
ptool.http.request
v0.1.0- Introduced.
ptool.http.request(options) envia uma requisição HTTP e retorna um objeto
Response.
Campos de options:
url(string, obrigatório): A URL da requisição.method(string, opcional): O método HTTP. O padrão é"GET".headers(table, opcional): Cabeçalhos da requisição, em que chaves e valores são strings.query(table, opcional): Parâmetros de consulta adicionados à URL da requisição. As chaves devem ser strings. Os valores podem ser strings, números ou booleanos.body(string, opcional): O corpo da requisição.json(valor Lua, opcional): Um valor Lua codificado como JSON e usado como corpo da requisição. Quandocontent-typenão está definido, o padrão passa a serapplication/json.form(table, opcional): Campos codificados comoapplication/x-www-form-urlencodede usados como corpo da requisição. As chaves devem ser strings. Os valores podem ser strings, números ou booleanos.timeout_ms(integer, opcional): Tempo limite em milissegundos. O padrão é30000.connect_timeout_ms(integer, opcional): Tempo limite de conexão em milissegundos.follow_redirects(boolean, opcional): Se os redirecionamentos devem ser seguidos.max_redirects(integer, opcional): Número máximo de redirecionamentos a seguir.user_agent(string, opcional): Define o cabeçalhouser-agent.basic_auth(table, opcional): Credenciais HTTP Basic com os campos stringusernameepassword.bearer_token(string, opcional): Token Bearer usado no cabeçalhoauthorization.fail_on_http_error(boolean, opcional): Quandotrue, respostas HTTP 4xx e 5xx geram erro. O padrão éfalse.
Notas:
body,jsoneformsão mutuamente exclusivos.basic_authebearer_tokensão mutuamente exclusivos.
Exemplo:
local resp = ptool.http.request({
url = "https://httpbin.org/post",
method = "POST",
query = {
page = 1,
draft = false,
},
json = {
name = "alice",
tags = {"admin", "beta"},
},
user_agent = "ptool-script/1.0",
fail_on_http_error = true,
})
print(resp.status, resp.ok)
print(resp:header("content-type"))
local data = resp:json()
print(data.json.name)
Response
v0.1.0- Introduced.
Response representa uma resposta HTTP retornada por
ptool.http.request(...).
Campos:
status(integer): O código de status HTTP.ok(boolean): Se o código de status está na faixa 2xx.url(string): A URL final após redirecionamentos.headers(table): Visão simplificada dos cabeçalhos da resposta (table<string, string>). Cabeçalhos repetidos são unidos com,.
Métodos:
resp:text(): Lê e retorna o corpo da resposta como texto.resp:json(): Lê o corpo da resposta, faz parse como JSON e retorna um valor Lua.resp:bytes(): Lê e retorna os bytes brutos como uma string Lua.resp:header(name): Retorna o primeiro valor de cabeçalho correspondente, ounil.resp:header_values(name): Retorna todos os valores de cabeçalho correspondentes como um array.resp:raise_for_status(): Gera erro para respostas HTTP 4xx e 5xx.
text
Canonical API name: ptool.http.Response:text.
resp:text() lê e retorna o corpo da resposta como texto.
- Retorna:
string.
json
Canonical API name: ptool.http.Response:json.
resp:json() lê o corpo da resposta, faz parse como JSON e retorna um valor
Lua.
bytes
Canonical API name: ptool.http.Response:bytes.
resp:bytes() lê e retorna o corpo da resposta como bytes brutos.
- Retorna:
string.
header
Canonical API name: ptool.http.Response:header.
resp:header(name) retorna o primeiro valor de cabeçalho de resposta que
corresponde a name.
name(string, obrigatório): O nome do cabeçalho a consultar.- Retorna:
string | nil.
header_values
Canonical API name: ptool.http.Response:header_values.
resp:header_values(name) retorna todos os valores de cabeçalho de resposta
que correspondem a name.
name(string, obrigatório): O nome do cabeçalho a consultar.- Retorna:
string[].
raise_for_status
Canonical API name: ptool.http.Response:raise_for_status.
resp:raise_for_status() gera erro quando o código de status da resposta está
na faixa 4xx ou 5xx.
Notas:
- Por padrão, status HTTP fora de 2xx não geram erro. Quem chama pode verificar
resp.ok, definirfail_on_http_error = trueou chamarresp:raise_for_status(). - O corpo da resposta é armazenado em cache após a primeira leitura, então
text,jsonebytespodem ser chamados várias vezes.