📅  最后修改于: 2023-12-03 15:22:55.204000             🧑  作者: Mango
在 Arduino 中发送 HTTP 请求可以让我们向互联网发送数据并从互联网接收数据。我们可以使用这些数据来控制不同的装置或从互联网上获取数据。本文会介绍怎么在 Arduino 中发送 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();
}
}
有些服务器要求用户在请求数据时输入密码或使用 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 请求的过程中,我们还可以包含用户名和密码来访问需要访问凭据的服务器。