title: Referência da Classe ESP32HTTPClient - Métodos e Assinaturas C++ description: Documentação de API completa para a classe ESP32HTTPClient: construtor, métodos de verbos HTTP, cabeçalhos persistentes, autenticação e timeouts. keywords: classe ESP32HTTPClient, construtor ESP32HTTPClient, referencia biblioteca C++ ESP32 HTTP, metodos cliente HTTP ESP32 tags: - api - client - class
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:
soap(path)¶
Inicia uma requisição SOAP direcionada para baseUrl + path, retornando um builder SoapRequest.
Exemplo:
client.soap("/ws")
.soapAction("http://example.org/GetPrice")
.body("<m:GetPrice xmlns:m=\"http://example.org\"><m:Item>Widget</m:Item></m:GetPrice>")
.getBody("Price", &preco);
graphql(path) / graphqlPost(path)¶
Inicia uma requisição GraphQL para baseUrl + path (padrão POST), retornando um builder GraphQLRequest.
GraphQLRequest graphql(const char* path = "/graphql");
GraphQLRequest graphqlPost(const char* path = "/graphql");
Exemplo:
graphqlGet(path)¶
Inicia uma consulta GraphQL para baseUrl + path via HTTP GET, codificando query e variáveis como parâmetros na URL.
Exemplo:
jsonRpc(path) / jsonrpc(path)¶
Inicia uma requisição JSON-RPC 2.0 direcionada a baseUrl + path, retornando um construtor JsonRpcRequest.
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:
cookie(nome, valor)¶
Anexa ou cria um cabeçalho Cookie no cliente. Retorna uma referência para ESP32HTTPClient, permitindo que você encadeie chamadas .get(), .post() ou até mesmo outros .cookie() diretamente no cliente.
Parâmetros:
* nome: O nome do cookie (ex: "session_id").
* valor: O valor do cookie (ex: "abc1234").
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:
Configuração TLS / HTTPS¶
A biblioteca oferece suporte completo a conexões seguras TLS/HTTPS através do mbedTLS nativo do ESP32 (NetworkClientSecure no core 3.x, WiFiClientSecure no core 2.x).
[!IMPORTANT] Semântica de Ponteiros: Certificados e chaves privadas são armazenados como ponteiros (não são copiados para a memória interna). Os buffers DEVEM permanecer válidos durante todo o ciclo de vida da instância
ESP32HTTPClient(ex.: declarados comostatic const char*, constantes globais ou alocados em PROGMEM).Sincronização de Relógio via NTP: A validação do certificado TLS confere as datas de validade (
notBeforeenotAfter). Se o relógio interno do ESP32 não estiver sincronizado via NTP (iniciando em 1970 por padrão), a validação falhará. Sincronize a hora usandoconfigTime(0, 0, "pool.ntp.org")logo após conectar ao WiFi.Consumo de Memória (Heap): Conexões TLS alocam buffers do mbedTLS (~45 KB de heap) sob demanda durante o primeiro handshake. Requisições
http://puras ou clientes sem TLS configurado não sofrem nenhum impacto na memória RAM. Chameclient.end()para fechar o socket e liberar imediatamente os buffers TLS.
setCACert(rootCA)¶
Configura o certificado da CA raiz (Root CA) em formato PEM para validar a cadeia de certificados do servidor.
Parâmetros:
| Parâmetro | Tipo | Descrição |
|---|---|---|
rootCA |
const char* |
String terminada em nulo contendo o certificado da CA raiz em formato PEM ("-----BEGIN CERTIFICATE-----\n..."). O ponteiro é mantido, sem cópia. |
Exemplo:
static const char* isrg_root_x1 = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n";
client.setCACert(isrg_root_x1);
setCACertBundle(bundle, size)¶
Configura um bundle de certificados X.509 (formato do esp_crt_bundle do ESP-IDF).
Parâmetros:
| Parâmetro | Tipo | Descrição |
|---|---|---|
bundle |
const uint8_t* |
Ponteiro para os dados binários do bundle de certificados. |
size |
size_t |
Tamanho opcional do buffer do bundle em bytes (utilizado no arduino-esp32 >= 3.0.4). |
setClientCert(cert, key)¶
Configura o certificado e a chave privada do cliente para autenticação mútua TLS (mTLS).
Parâmetros:
| Parâmetro | Tipo | Descrição |
|---|---|---|
cert |
const char* |
Certificado do cliente em formato PEM. Mantido por ponteiro. |
key |
const char* |
Chave privada do cliente em formato PEM. Mantido por ponteiro. |
setInsecure()¶
Desativa explicitamente a validação do certificado do servidor e do hostname, emitindo um log de aviso de segurança (log_w).
[!WARNING] Chamar
setInsecure()desativa a validação TLS e deixa a comunicação vulnerável a ataques do tipo Man-in-the-Middle (MITM). Use esta opção apenas em ambiente local de desenvolvimento, testes ou certificados autoassinados onde a validação não for viável. CasorequireValidatedTls(true)esteja ativo, conexões HTTPS serão recusadas (-12) mesmo quesetInsecure()tenha sido chamado.
requireValidatedTls(require)¶
Ativa ou desativa o modo "falhar fechado" (fail-closed) para conexões TLS. Quando ativado (true), qualquer requisição https:// sem uma CA Raiz (setCACert) ou bundle (setCACertBundle) configurado — ou com setInsecure() ativo — é recusada imediatamente antes de abrir o socket e retorna o código HTTPC_ERROR_TLS_NOT_VALIDATED (-12).
Também pode ser habilitado globalmente em tempo de compilação com a flag -DESP32HTTPCLIENT_REQUIRE_VALIDATED_TLS=1.
Parâmetros:
| Parâmetro | Tipo | Descrição |
|---|---|---|
require |
bool |
true (padrão) para exigir validação de certificado em todas as requisições https://; false para permitir fallback com log de aviso. |
Exemplo:
isValidatedTlsRequired()¶
Retorna true se o modo fail-closed de validação TLS estiver ativo nesta instância do cliente.
hasValidatedTlsConfig()¶
Retorna true se houver uma CA Raiz (setCACert) ou bundle (setCACertBundle) não-vazio configurado e setInsecure() não estiver ativo.
end()¶
Encerra a conexão ativa e libera os recursos associados. Para conexões TLS, fecha o socket seguro e libera os buffers internos do mbedTLS (~45 KB). O cliente continua funcional e pode abrir uma nova conexão na próxima requisição.
getTlsError()¶
Retorna o código de erro subjacente do mbedTLS (int) do último handshake ou tentativa de conexão TLS (valores negativos como MBEDTLS_ERR_X509_CERT_VERIFY_FAILED). Retorna 0 se não houver erro de TLS.
getTlsErrorMessage()¶
Retorna uma mensagem legível com a descrição e representação hexadecimal do último erro de mbedTLS.
getTlsErrorHint()¶
Retorna uma dica prática de diagnóstico para a última falha de handshake TLS (ou bloqueio fail-closed), inspecionando o código mbedTLS e o relógio do sistema (time(nullptr)). Por exemplo, se a hora do sistema estiver antes de 2023, orienta sincronizar via NTP (configTime()). Retorna "" caso nenhuma dica se aplique.
Exemplo:
if (client.hasError() && client.getTlsError() != 0) {
Serial.printf("Dica TLS: %s\n", client.getTlsErrorHint().c_str());
}
tlsErrorToHint(tlsError, currentEpoch)¶
Método estático auxiliar que mapeia um código de erro do mbedTLS (e um timestamp Unix opcional currentEpoch; passe -1 para consultar time(nullptr) automaticamente) para uma dica prática de solução.
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. Quando uma requisição HTTPS falha com código negativo, getErrorMessage() anexa automaticamente a descrição e o código hexadecimal do mbedTLS junto com a dica prática de diagnóstico (getTlsErrorHint()).
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 concluída, independentemente de ter sucesso ou falhado.
Exemplo:
onObservability(cb)¶
Registra um callback global invocado ao final de cada requisição, fornecendo métricas de performance (tempos, tamanho de payload, uso de heap).
Definição do Struct (ObservabilityMetrics):
struct ObservabilityMetrics {
unsigned long totalTimeMs;
unsigned long ttfbMs;
size_t txBytes;
size_t rxBytes;
int retries;
uint32_t freeHeapBefore;
uint32_t freeHeapAfter;
};
Exemplo:
client.onObservability([](const ObservabilityMetrics& m) {
Serial.printf("TTFB: %lu ms | TX: %d | RX: %d\n", m.ttfbMs, m.txBytes, m.rxBytes);
});
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
Códigos de Erro e Códigos de Status HTTP¶
| Código | Significado | Categoria |
|---|---|---|
-1 |
Conexão Recusada | Erro do cliente |
-2 |
Falha ao Enviar Cabeçalho | Erro do cliente |
-3 |
Falha ao Enviar Payload | Erro do cliente |
-4 |
Não Conectado | Erro do cliente |
-5 |
Conexão Perdida | Erro do cliente |
-6 |
Sem Stream | Erro do cliente |
-7 |
Sem Servidor HTTP | Erro do cliente |
-8 |
Memória RAM Insuficiente | Erro do cliente |
-9 |
Erro de Codificação | Erro do cliente |
-10 |
Erro de Escrita no Stream | Erro do cliente |
-11 |
Tempo Limite de Leitura | Erro do cliente |
-12 |
Validação TLS Obrigatória (TLS Validation Required) |
Erro do cliente (TLS fail-closed) |
200 |
OK | Sucesso HTTP |
201 |
Criado | Sucesso HTTP |
202 |
Aceito | Sucesso HTTP |
204 |
Sem Conteúdo | Sucesso HTTP |
400 |
Requisição Inválida | Erro do cliente HTTP |
401 |
Não Autorizado | Erro do cliente HTTP |
403 |
Proibido | Erro do cliente HTTP |
404 |
Não Encontrado | Erro do cliente HTTP |
405 |
Método Não Permitido | Erro do cliente HTTP |
408 |
Tempo Limite da Requisição | Erro do cliente HTTP |
409 |
Conflito | Erro do cliente HTTP |
429 |
Muitas Requisições | Erro do cliente HTTP |
500 |
Erro Interno do Servidor | Erro do servidor HTTP |
501 |
Não Implementado | Erro do servidor HTTP |
502 |
Gateway Inválido | Erro do servidor HTTP |
503 |
Serviço Indisponível | Erro do servidor HTTP |
504 |
Tempo Limite do Gateway | Erro do servidor HTTP |
0 |
Não Executado | Estado interno |
Comportamento Genérico de Fallback¶
- Códigos negativos desconhecidos → Erro de Cliente Desconhecido
- 200–299 → Sucesso
- 300–399 → Redirecionamento
- 400–499 → Erro do Cliente
- 500–599 → Erro do Servidor
- Outros valores → Status HTTP Desconhecido
Exemplo¶
Um pequeno exemplo de uso mostrando como aplicações podem tratar tanto erros de transporte quanto erros HTTP: