ESP32HTTPClient¶
O principal ponto de entrada da biblioteca. Crie uma instância por URL base de servidor e reutilize-a em todas as requisições.
Cabeçalho: #include "ESP32HTTPClient.h"
Construtor¶
ESP32HTTPClient(baseUrl)¶
Cria um cliente com seleção automática de porta (80 para HTTP, 443 para HTTPS).
Parâmetros:
| Parâmetro | Tipo | Descrição |
|---|---|---|
baseUrl |
const char* |
A URL base incluindo protocolo (ex: "https://api.example.com"). Não inclua uma barra no final. |
Exemplo:
ESP32HTTPClient(baseUrl, port)¶
Cria um cliente direcionado a uma porta específica.
Parâmetros:
| Parâmetro | Tipo | Descrição |
|---|---|---|
baseUrl |
const char* |
A URL base incluindo o protocolo. |
port |
int |
A porta TCP alvo (ex: 8080, 443). |
Exemplo:
Métodos de Requisição HTTP¶
Cada método retorna um RestRequest que pode ser encadeado com .query(), .body() e .getBody(). A requisição HTTP é enviada quando o objeto RestRequest sai de escopo ou quando o primeiro .getBody() é adicionado.
get(path)¶
Envia uma requisição GET para baseUrl + path.
Exemplo:
post(path)¶
Envia uma requisição POST para baseUrl + path.
Exemplo:
put(path)¶
Envia uma requisição PUT para baseUrl + path.
Exemplo:
update(path)¶
Alias semântico para put(). Envia uma requisição HTTP PUT idêntica.
Exemplo:
patch(path)¶
Envia uma requisição PATCH para baseUrl + path para atualizações parciais.
Exemplo:
del(path)¶
Envia uma requisição DELETE para baseUrl + path.
Exemplo:
Métodos de Configuração¶
setHeader(name, value)¶
Registra um cabeçalho HTTP personalizado enviado com todas as requisições subsequentes.
| Parâmetro | Limite |
|---|---|
name |
Até 63 caracteres |
value |
Até 255 caracteres |
Exemplo:
client.setHeader("Authorization", "Bearer meu-token");
client.setHeader("X-Device-ID", "ESP32-001");
Note
Cabeçalhos persistem durante todo o ciclo de vida da instância do cliente. Chame setHeader() novamente com o mesmo nome para sobrescrevê-lo.
Lendo cabeçalhos de resposta
setHeader() define cabeçalhos a serem enviados na requisição. Para ler cabeçalhos retornados pelo servidor na resposta, utilize RestRequest::getHeader.
bearer(token)¶
Define o cabeçalho Authorization: Bearer <token> enviado com todas as requisições subsequentes.
| Parâmetro | Tipo | Descrição |
|---|---|---|
token |
const char* |
A string do token Bearer / JWT. |
Exemplo:
basic(user, password)¶
Codifica as credenciais em Base64 e define o cabeçalho Authorization: Basic <base64> enviado com todas as requisições subsequentes.
| Parâmetro | Tipo | Descrição |
|---|---|---|
user |
const char* |
Nome de usuário. |
password |
const char* |
Senha. |
Exemplo:
apiKey(name, key)¶
Define um cabeçalho de chave de API (ex: x-api-key) enviado com todas as requisições subsequentes.
| Parâmetro | Tipo | Descrição |
|---|---|---|
name |
const char* |
Nome do cabeçalho (ex: "X-API-Key" ou "x-api-key"). |
key |
const char* |
String da chave de API. |
Exemplo:
setBaseUrl(baseUrl, port)¶
Altera a URL base e a porta de destino em tempo de execução para as requisições subsequentes.
Exemplo:
setUrl(baseUrl)¶
Atalho para atualizar apenas a URL base em tempo de execução.
setPort(port)¶
Atualiza a porta TCP de destino em tempo de execução.
getBaseUrl()¶
Retorna a URL base atual configurada.
getPort()¶
Retorna a porta TCP configurada (ou 0 se padrão).
setTimeout(timeoutMs)¶
Configura o tempo limite (timeout) padrão em milissegundos para todas as requisições deste cliente. O padrão é 60000 ms (1 minuto).
Exemplo:
getTimeout()¶
Retorna o timeout configurado em milissegundos.
setMaxRetry(maxRetry)¶
Configura o número máximo de tentativas automáticas em caso de falha de rede. O padrão é 1 tentativa.
Exemplo:
getMaxRetry()¶
Retorna o número máximo configurado de tentativas.
setContentType(contentType)¶
Sobrescreve o cabeçalho Content-Type usado no corpo das requisições. O padrão é application/json.
Exemplo:
Inspeção de Resposta e Tratamento de Erros¶
getStatusCode()¶
Retorna o código de status HTTP da última requisição concluída.
Valores de retorno:
| Valor | Significado |
|---|---|
> 0 |
Código de status HTTP padrão (200, 201, 404, 500…) |
< 0 |
Erro no nível de rede (sem conexão, timeout, etc.) |
0 |
Nenhuma requisição foi realizada ainda |
isSuccess()¶
Retorna true se a última requisição foi concluída com status HTTP de sucesso 2xx (200 <= code < 300).
Exemplo:
client.get("/data").getBody("val", &val);
if (client.isSuccess()) {
Serial.println("Requisição bem-sucedida!");
}
hasError()¶
Retorna true se a última requisição falhou devido a um erro de rede (code < 0) ou erro HTTP de cliente/servidor (code >= 400).
Exemplo:
client.get("/data").getBody("val", &val);
if (client.hasError()) {
Serial.printf("Erro (%d): %s\n", client.getStatusCode(), client.getErrorMessage().c_str());
}
getErrorMessage()¶
Retorna uma descrição legível do último código de status ou de erro retornado.
errorToString(code)¶
Método estático auxiliar que converte qualquer código de status HTTP ou código de erro negativo em uma descrição textual.
Serialização & Desserialização de Structs¶
Métodos utilitários estáticos para conversão entre structs C++ mapeadas e strings JSON.
toJson(struct)¶
Serializa uma struct mapeada com REST_JSON_MAP em uma string JSON.
Exemplo:
fromJson(json, struct)¶
Preenche uma struct mapeada com REST_JSON_MAP a partir de uma string JSON.
template <typename T>
static void fromJson(const String& json, T* target);
template <typename T>
static void fromJson(const char* json, T* target);
Exemplo:
Callbacks¶
Você pode registrar callbacks globais na instância do cliente que são executados sempre que qualquer requisição é finalizada.
onSuccess(callback)¶
Registra um callback executado quando qualquer requisição finaliza com sucesso 2xx (200 <= code < 300).
Exemplo:
onError(callback)¶
Registra um callback executado quando qualquer requisição falha com erro (code < 200 || code >= 400).
Exemplo:
client.onError([](int code, const char* message) {
Serial.printf("Requisição falhou (%d): %s\n", code, message);
});
onResponse(callback)¶
Registra um callback executado em qualquer requisição finalizada, independentemente de sucesso ou falha.
Exemplo:
Gerenciamento de Conexão¶
end()¶
Fecha a conexão TCP/TLS Keep-Alive persistente e libera seus buffers de memória.
Chame este método após uma sequência de requisições para liberar ~45KB de memória TLS durante um período de inatividade longo. A próxima requisição restabelecerá a conexão automaticamente.
Exemplo:
client.get("/data1").getBody("v", &v1);
client.get("/data2").getBody("v", &v2);
client.end(); // libera memória TLS
delay(60000);
client.get("/data3").getBody("v", &v3); // reconecta automaticamente
Tabela de Referência de Códigos de Erro¶
Códigos de Erro de Rede / Cliente (code < 0)¶
| Código | Constante | Descrição |
|---|---|---|
-1 |
HTTPC_ERROR_CONNECTION_REFUSED |
O host de destino recusou a conexão TCP. |
-2 |
HTTPC_ERROR_SEND_HEADER_FAILED |
Falha ao enviar cabeçalhos HTTP pelo socket. |
-3 |
HTTPC_ERROR_SEND_PAYLOAD_FAILED |
Falha ao transmitir o corpo da requisição. |
-4 |
HTTPC_ERROR_NOT_CONNECTED |
Cliente não está conectado à rede/socket. |
-5 |
HTTPC_ERROR_CONNECTION_LOST |
A conexão TCP foi interrompida inesperadamente. |
-6 |
HTTPC_ERROR_NO_STREAM |
Nenhum stream de resposta disponível. |
-7 |
HTTPC_ERROR_NO_HTTP_SERVER |
Servidor não respondeu com HTTP válido. |
-8 |
HTTPC_ERROR_TOO_LESS_RAM |
Memória RAM (Heap) insuficiente para a operação. |
-9 |
HTTPC_ERROR_ENCODING |
Erro de codificação ou decodificação de transferência. |
-10 |
HTTPC_ERROR_STREAM_WRITE |
Falha na operação de escrita no stream. |
-11 |
HTTPC_ERROR_READ_TIMEOUT |
Tempo limite esgotado aguardando resposta do servidor. |
Códigos de Status HTTP Comuns (code > 0)¶
| Código | Status | Descrição |
|---|---|---|
200 |
OK | Requisição concluída com sucesso. |
201 |
Created | Recurso criado com sucesso no servidor. |
202 |
Accepted | Requisição aceita para processamento assíncrono. |
204 |
No Content | Sucesso, servidor não retornou conteúdo no corpo. |
400 |
Bad Request | Requisição malformada ou dados inválidos. |
401 |
Unauthorized | Credenciais de autenticação ausentes ou inválidas. |
403 |
Forbidden | Autenticado, mas sem permissão de acesso ao recurso. |
404 |
Not Found | O endpoint solicitado não existe no servidor. |
408 |
Request Timeout | Servidor expirou o tempo de espera pela requisição. |
429 |
Too Many Requests | Limite de taxa de requisições excedido. |
500 |
Internal Server Error | Erro interno genérico no servidor. |
502 |
Bad Gateway | Resposta inválida recebida do servidor upstream. |
503 |
Service Unavailable | Servidor sobrecarregado ou em manutenção. |
504 |
Gateway Timeout | Gateway upstream expirou aguardando resposta. |