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

ESP32调用远程IIS部署的ASP.NET Web API返回错误码-1求助

ESP32调用远程IIS上ASP.NET Web API返回错误码-1排查方案

错误码-1在ESP32的HTTPClient库中代表连接建立失败,结合你电脑浏览器能正常访问的情况,按以下步骤排查:

1. 域名解析问题

ESP32的默认DNS服务器可能无法解析rmhq-routenet这个域名,而电脑使用的DNS(比如路由器或运营商DNS)可以正常解析。

  • 临时测试:把URL中的域名替换成API服务器的公网IP地址,比如http://xxx.xxx.xxx.xxx/testapi/weatherforecast,如果能正常获取响应,说明是DNS问题。
  • 永久解决:在WiFi连接成功后,指定可靠的DNS服务器(如谷歌DNS 8.8.8.8),代码中添加:
    WiFi.config(INADDR_NONE, INADDR_NONE, IPAddress(8, 8, 8, 8));
    

2. 服务器防火墙/IP白名单限制

IIS服务器的防火墙可能只允许特定IP段(比如你电脑所在的局域网或办公网络)访问,ESP32的公网IP不在允许列表内。

  • 排查方法:临时关闭服务器防火墙,测试ESP32能否访问;或者在防火墙规则中开放80端口(如果API用默认HTTP端口)给ESP32的公网IP。
  • 注意:如果服务器在企业内网,还要确认ESP32所在网络能穿透到服务器的网络环境,没有NAT或代理限制。

3. 请求头缺失导致服务器拒绝

电脑浏览器会自动添加User-Agent等标准请求头,而ESP32的请求头过于简洁,部分API会以此判断请求合法性并拒绝。

  • 解决:在代码中添加User-Agent请求头:
    http.addHeader("User-Agent", "ESP32-HTTPClient");
    

4. 端口号未明确指定

如果API没有使用HTTP默认的80端口,URL中必须明确标注端口号(比如http://rmhq-routenet:8080/testapi/weatherforecast),电脑浏览器可能通过缓存或自动跳转处理,但ESP32无法自动识别。

5. 验证WiFi连接有效性

虽然代码显示WiFi已连接,但可能存在虚假连接(比如获取到IP但无法访问外网)。在setup中添加代码打印设备IP:

Serial.print("Local IP: ");
Serial.println(WiFi.localIP());

同时可以在ESP32上尝试访问公共API(比如http://httpbin.org/get),验证HTTPClient功能是否正常。


修改后的测试代码

#include "WiFi.h"
#include "HTTPClient.h"

const int32_t LED_BUILTIN = 2;

const char* SSID = "你的WiFi名称";
const char* PASSWORD = "你的WiFi密码";

void setup() {
  Serial.begin(115200);

  pinMode(LED_BUILTIN, OUTPUT);

  WiFi.begin(SSID, PASSWORD);

  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print("-");
  }
  
  // 指定DNS服务器解决解析问题
  WiFi.config(INADDR_NONE, INADDR_NONE, IPAddress(8, 8, 8, 8));
  
  Serial.println("");
  Serial.println("Wifi Connected");
  Serial.print("Local IP: ");
  Serial.println(WiFi.localIP());

  digitalWrite(LED_BUILTIN, HIGH);
}

void loop() {
  if(WiFi.status() == WL_CONNECTED){
    HTTPClient http;

    // 优先用IP测试,替换成你的服务器IP
    http.begin("http://rmhq-routenet/testapi/weatherforecast");
    http.addHeader("Accept", "application/json");
    // 添加User-Agent头
    http.addHeader("User-Agent", "ESP32-HTTPClient");
    
    int response_code = http.GET();

    if(response_code > 0){
      Serial.print("Response Code: ");
      Serial.println(response_code);

      String response_data = http.getString();

      Serial.print("Response Data: ");
      Serial.println(response_data);
    }
    else{
      Serial.print("Error Code: ");
      Serial.println(response_code);
      // 打印详细错误描述
      Serial.print("Error Details: ");
      Serial.println(http.errorToString(response_code));
    }

    http.end();
  }

  delay(5000); // 延长请求间隔,避免服务器限流
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:33:25