ESP32在Wokwi模拟中向Google Chat Webhook发请求遭连接拒绝
解决ESP32向Google Chat Webhook发送消息时的"connection refused"错误
问题分析
你遇到的连接拒绝错误,核心原因有两个:
- HTTPS连接的证书验证未正确处理(Google Chat使用HTTPS协议,WiFiClientSecure默认需要验证服务器证书)
- 发送的JSON格式不符合规范(JSON要求字符串必须使用双引号,你代码里用了单引号)
修改后的完整代码
#include <WiFi.h> #include <HTTPClient.h> const char* ssid = "Wokwi-GUEST"; const char* password = ""; const char* googleChatWebhook = "https://chat.googleapis.com/v1/spaces/mySpace/messages?key=myKey&token=myToken"; void setup() { Serial.begin(115200); // 移除信道参数,让ESP32自动适配Wokwi-GUEST的可用信道 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; WiFiClientSecure client; // 测试环境下跳过证书验证(生产环境建议添加Google根证书保证安全) client.setInsecure(); // 修正JSON格式:使用转义后的双引号 String message = "{\"text\": \"Hello, this is a test message!\"}"; boolean result = http.begin(client, googleChatWebhook); Serial.println(result ? "HTTP初始化成功" : "HTTP初始化失败"); http.addHeader("Content-Type", "application/json"); int httpResponseCode = http.POST(message); Serial.print("HTTP响应码: "); Serial.println(httpResponseCode); if (httpResponseCode > 0) { String payload = http.getString(); Serial.println(payload); } else { Serial.print("HTTP请求失败,错误信息: "); Serial.println(http.errorToString(httpResponseCode)); } http.end(); } delay(5000); }
关键修改说明
- 证书验证处理:添加
client.setInsecure()跳过HTTPS证书验证。Wokwi模拟环境默认没有预装Google的根证书,这是导致连接被拒绝的主要原因(生产环境请导入对应根证书,不要用此方法)。 - JSON格式修正:将单引号替换为转义后的双引号
"{\"text\": \"Hello...\"}",符合JSON规范,避免服务器拒绝请求。 - WiFi连接优化:移除
WiFi.begin的第三个信道参数,让ESP32自动扫描并连接可用信道,避免指定错误信道导致连接不稳定。
额外验证建议
- 确认Webhook URL中的
mySpace、myKey、myToken参数和Postman中使用的完全一致。 - 在Wokwi串口监视器中查看
HTTP初始化成功的输出,确认客户端初始化正常。
内容的提问来源于stack exchange,提问作者user23141854
相关产品推荐
相关产品推荐

