Enviando uma requisição HTTP com autenticação básica

Arduino:
Enviando uma requisição HTTP com autenticação básica

Como Fazer:

#include <ESP8266WiFi.h>
#include <Base64.h>

const char* ssid = "Seu_SSID";
const char* password = "Sua_Senha";
const char* host = "servidor.com";
const int httpPort = 80;
const char* user = "usuario";
const char* pass = "senha123";

WiFiClient client;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  if (client.connect(host, httpPort)) {
    String auth = user + String(":") + pass;
    String authEncoded = base64::encode(auth);

    String request = String("GET /recurso HTTP/1.1\r\n") +
                     "Host: " + host + "\r\n" +
                     "Authorization: Basic " + authEncoded + "\r\n" +
                     "Connection: close\r\n\r\n";

    client.print(request);

    while (client.connected()) {
      String line = client.readStringUntil('\n');
      if (line == "\r") {
        break;
      }
    }

    String response = client.readString();
    Serial.println(response);
  } else {
    Serial.println("Falha na conexão");
  }
}

void loop() {
}

Saída Exemplar:

HTTP/1.1 200 OK
Content-Type: application/json
Connection: close

{"mensagem": "Acesso concedido."}

Aprofundamento

A autenticação básica HTTP é um método antigo, mas ainda em uso para proteger web services. Baseia-se na codificação das credenciais com Base64, contudo, é considerada insegura se não usada em conjunto com HTTPS, dado que pode ser facilmente decodificada. Alternativas mais seguras incluem OAuth e tokens JWT. Nessa implementação no Arduino, é essencial o uso da biblioteca Base64 para codificar o username e password. Além disso, a ESP8266WiFi library é necessária para estabelecer a conexão Wi-Fi.

Veja Também