📜  发送 http 请求 arduino 密码 (1)

📅  最后修改于: 2023-12-03 15:22:55.204000             🧑  作者: Mango

在 Arduino 中发送 HTTP 请求及密码

介绍

在 Arduino 中发送 HTTP 请求可以让我们向互联网发送数据并从互联网接收数据。我们可以使用这些数据来控制不同的装置或从互联网上获取数据。本文会介绍怎么在 Arduino 中发送 HTTP 请求及密码。

HTTP 请求

HTTP 请求分为四个部分:请求类型、主机名、路径和消息头。请求类型指明请求的类型,主机名指明服务器的主机名,路径指明所请求的路径以及消息头包括其他一些信息。

在下面的示例代码中,我们使用 Arduino 的 Ethernet 库来创建 HTTP 请求。

#include <Ethernet.h>

// 定义网络配置
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
IPAddress server(192, 168, 1, 100);

// 初始化 EthernetClient 对象
EthernetClient client;

void setup() {
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
  Serial.println("connecting...");

  // 连接服务器
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // 发送 HTTP 请求
    client.println("GET / HTTP/1.1");
    client.println("Host: 192.168.1.100");
    client.println("Connection: close");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop() {
  // 如果与服务器的连接断开,进行重新连接
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    delay(1000);
    setup();
  }
}
HTTP 请求和密码

有些服务器要求用户在请求数据时输入密码或使用 API 密钥。在这些情况下,我们需要在 HTTP 请求中包含密码或 API 密钥。

在下面的示例代码中,我们使用 Arduino 的 Ethernet 库来创建 HTTP 请求和密码。

#include <Ethernet.h>

// 定义网络配置
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
IPAddress server(192, 168, 1, 100);

// 定义访问凭据,包括用户名和密码
char user[] = "admin";
char password[] = "password";

// 初始化 EthernetClient 对象
EthernetClient client;

void setup() {
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
  Serial.println("connecting...");

  // 连接服务器
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // 发送 HTTP 请求
    client.println("GET / HTTP/1.1");
    client.println("Host: 192.168.1.100");
    // 在 HTTP 头中包含用户名和密码
    client.print("Authorization: Basic ");
    // 将用户名和密码转换为 Base64 编码格式
    String authString = String(user) + ":" + String(password);
    char authChar[authString.length()];
    authString.toCharArray(authChar, authString.length() + 1);
    byte base64Enc[base64_enc_len(strlen(authChar))];
    base64_encode(base64Enc, authChar, strlen(authChar));
    // 将 Base64 编码格式添加到 HTTP 头中
    client.println((char*) base64Enc);
    client.println("Connection: close");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop() {
  // 如果与服务器的连接断开,进行重新连接
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    delay(1000);
    setup();
  }
}
结论

以上就是在 Arduino 中发送 HTTP 请求及密码的介绍。我们可以使用这种方法来远程控制装置或从互联网上获取数据。在发送 HTTP 请求的过程中,我们还可以包含用户名和密码来访问需要访问凭据的服务器。