// HTTP POST请求示例 void http_rest_with_post(void) { // 配置HTTP客户端 // esp_http_client_config_t config = { // .host = API_HOST, // 设置服务器主机名 // .path = API_PATH, // 设置API路径 // .event_handler = _http_event_handler, // 设置事件处理函数 // .transport_type = HTTP_TRANSPORT_OVER_SSL, // 使用HTTPS // }; esp_http_client_config_t config = { .url = "https://api.deepseek.com/v1/chat/completions", // 使用完整URL .event_handler = _http_event_handler, .skip_cert_common_name_check = true, .cert_pem = NULL, .buffer_size = 2048, .buffer_size_tx = 2048 }; // 打印调试信息 ESP_LOGI(TAG, "Connecting to DeepSeek API..."); // 初始化HTTP客户端 esp_http_client_handle_t client = esp_http_client_init(&config); // 准备POST请求的JSON数据 const char *post_data = "{" "\"model\": \"deepseek-chat\"," "\"messages\": [" "{\"role\": \"system\", \"content\": \"你是一位专业的心理咨询师,用温暖亲切的语气回答问题\"}," "{\"role\": \"user\", \"content\": \"你好\"}" "]," "\"stream\": false" "}"; // 配置HTTP请求 esp_http_client_set_method(client, HTTP_METHOD_POST); // 设置HTTP方法为POST // 添加必要的请求头 esp_http_client_set_header(client, "Content-Type", "application/json"); // 设置内容类型为JSON // 添加Authorization头部,API密钥使用Bearer认证方式 char auth_header[100]; snprintf(auth_header, sizeof(auth_header), "Bearer %s", "sk-e4fc67b1cbe444c0a846879d0784a99b"); esp_http_client_set_header(client, "Authorization", auth_header); // 设置POST数据 esp_http_client_set_post_field(client, post_data, strlen(post_data)); // 执行HTTP请求 esp_err_t err = esp_http_client_perform(client); if (err == ESP_OK) { // 请求成功,打印状态码和响应长度 ESP_LOGI(TAG, "HTTP POST Status = %d, content_length = %"PRId64, esp_http_client_get_status_code(client), // 获取HTTP状态码 esp_http_client_get_content_length
时间: 2025-06-27 09:03:01 浏览: 9
<think>好的,用户想了解如何通过ESP32发送带有JSON数据和授权头的HTTPS POST请求,特别是针对DeepSeek API的例子。我需要结合之前的引用内容,尤其是引用[1]和[2]中的信息,来构建一个完整的示例。
首先,用户需要包含必要的库,比如HTTP客户端库和ArduinoJson。然后设置Wi-Fi连接,这部分可以参考引用[3]中的硬件准备,确保ESP32型号兼容。接下来是配置HTTPS客户端,设置URL和方法为POST,添加Authorization头,这里引用[1]提到要将token放入Authorization头,所以需要正确格式化Bearer令牌。
构造JSON数据需要使用ArduinoJson库,用户需要正确创建JsonDocument对象并添加字段。设置Content-Type为application/json,并指定POST字段数据。发送请求后处理响应,检查状态码和内容长度,这部分可以引用[2]中的代码示例,使用esp_http_client_perform和获取状态码的函数。
另外,要考虑HTTPS的证书处理,可能需要禁用证书验证(仅测试环境),实际应用中应使用正确证书。还需要处理错误情况,如Wi-Fi连接失败或HTTP请求失败,释放资源避免内存泄漏。
最后生成相关问题,覆盖证书处理、JSON构造、错误处理、优化方法等,确保用户全面理解。</think>以下是一个基于ESP32的HTTPS POST请求示例,包含JSON数据和授权头(以DeepSeek API为例):
```cpp
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* apiUrl = "https://api.deepseek.com/v1/chat/completions";
const char* authToken = "Bearer your_API_KEY"; // 根据[^1]设置鉴权令牌
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient https;
https.begin(apiUrl); // 根据[^2]初始化客户端
// 设置请求头
https.addHeader("Content-Type", "application/json");
https.addHeader("Authorization", authToken); // 根据添加授权头
// 创建JSON请求体
StaticJsonDocument<200> doc;
doc["model"] = "deepseek-chat";
doc["max_tokens"] = 2048;
JsonArray messages = doc.createNestedArray("messages");
JsonObject message1 = messages.createNestedObject();
message1["role"] = "user";
message1["content"] = "Hello!";
String requestBody;
serializeJson(doc, requestBody);
// 发送POST请求
int httpCode = https.POST(requestBody); // 根据[^2]执行请求
if (httpCode > 0) {
String payload = https.getString();
Serial.printf("HTTP Status: %d\n", httpCode);
Serial.println("Response:");
Serial.println(payload);
} else {
Serial.printf("Error code: %d\n", httpCode);
}
https.end();
}
delay(5000); // 每5秒发送一次请求
}
```
关键要点说明:
1. 需要安装必要的库:`WiFiClientSecure`、`HTTPClient`和`ArduinoJson`
2. 授权头格式需符合API要求,使用Bearer Token[^1]
3. 根据[^2]正确处理HTTP请求生命周期
4. JSON构造使用ArduinoJson库,注意内存分配
5. 实际使用需要配置SSL证书(示例中未显示)
阅读全文
相关推荐










