You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP8266(Arduino)中http.GET()返回-1问题求助

问题

尝试从API端点https://bitcoin-ethereum-price-test.vercel.app/btc获取数据,每次调用http.GET()都返回-1,但浏览器访问该端点能正常返回200状态码。

使用的代码如下:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <Wire.h>

WiFiClient wifiClient;

void setup() {
  Serial.begin(9600);
  WiFi.begin("56", "emayush56");
  while(WiFi.status() != WL_CONNECTED)
  {
    delay(200);
    Serial.print("..");
  }
  Serial.println();
  Serial.println("NodeMCU is connected!");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {

    HTTPClient http;
    
    http.begin(wifiClient, "https://bitcoin-ethereum-price-test.vercel.app/btc");
    int httpCode = http.GET();
    Serial.println("***   RESPONSE STATUS   ***");
    Serial.println(httpCode);

    if (httpCode > 0) {
      String payload = http.getString();
      Serial.println(payload);
    }
    http.end();
  }
  delay(3000);
}

已尝试http.begin()的两种调用形式,但问题依旧:

  • type1: bool begin(WiFiClient &client, const String& url);
  • type2: bool begin(WiFiClient &client, const String& host, uint16_t port, const String& uri = "/", bool https = false);
问题分析与解决方法

核心原因:普通WiFiClient不支持HTTPS

你使用的WiFiClient仅能处理HTTP请求,无法解析HTTPS所需的SSL/TLS加密连接,这是导致GET()返回-1(连接失败)的主要原因。浏览器内置了SSL处理能力,所以能正常访问HTTPS端点,但ESP8266的默认WiFiClient不具备该功能。

修复步骤

  1. 替换为WiFiClientSecure
    将代码中的WiFiClient替换为WiFiClientSecure,并包含对应的头文件:

    #include <ESP8266WiFi.h>
    #include <ESP8266HTTPClient.h>
    #include <WiFiClientSecure.h> // 替换原WiFiClient头文件
    #include <Wire.h>
    
    WiFiClientSecure wifiClient; // 替换为WiFiClientSecure
    
  2. 跳过SSL证书验证(测试阶段)
    为了快速验证,可以临时跳过证书验证(生产环境建议配置正确证书):
    在setup()函数中添加:

    wifiClient.setInsecure(); // 跳过证书验证,仅用于测试
    
  3. 调整http.begin调用(可选)
    使用type2调用形式时,需指定HTTPS端口443,并开启https参数:

    http.begin(wifiClient, "bitcoin-ethereum-price-test.vercel.app", 443, "/btc", true);
    
  4. 完整修复后代码示例

    #include <ESP8266WiFi.h>
    #include <ESP8266HTTPClient.h>
    #include <WiFiClientSecure.h>
    #include <Wire.h>
    
    WiFiClientSecure wifiClient;
    
    void setup() {
      Serial.begin(9600);
      WiFi.begin("56", "emayush56");
      while(WiFi.status() != WL_CONNECTED)
      {
        delay(200);
        Serial.print("..");
      }
      Serial.println();
      Serial.println("NodeMCU is connected!");
      Serial.println(WiFi.localIP());
      
      wifiClient.setInsecure(); // 测试用,跳过证书验证
    }
    
    void loop() {
      if (WiFi.status() == WL_CONNECTED) {
    
        HTTPClient http;
        
        // 两种调用方式任选其一
        // 方式1:直接传入完整URL
        http.begin(wifiClient, "https://bitcoin-ethereum-price-test.vercel.app/btc");
        // 方式2:拆分host、port、uri
        // http.begin(wifiClient, "bitcoin-ethereum-price-test.vercel.app", 443, "/btc", true);
        
        int httpCode = http.GET();
        Serial.println("***   RESPONSE STATUS   ***");
        Serial.println(httpCode);
    
        if (httpCode > 0) {
          String payload = http.getString();
          Serial.println(payload);
        }
        http.end();
      }
      delay(3000);
    }
    

其他可能排查点

  • 检查WiFi网络是否有防火墙或代理限制,阻止ESP8266访问外部HTTPS服务
  • 确认API端点没有针对非浏览器请求的反爬策略(比如UA检测),可以尝试添加自定义User-Agent:
    http.addHeader("User-Agent", "ESP8266-HTTPClient/1.0");
    

内容的提问来源于stack exchange,提问作者emAyush56

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:50:27