ESP32调用Google Apps Script的GET/POST接口返回303错误如何解决
问题原因
Google Apps Script 对外发布的Web App接口会默认执行一次303重定向,将请求转发到script.googleusercontent.com域名下的实际响应地址。Postman等HTTP客户端默认开启自动跟随重定向,因此测试正常;而ESP32的HTTPClient库默认关闭该配置,因此只会拿到303重定向响应。
另外你提供的GAS代码遗漏了 Spreadsheet 实例初始化定义,会导致运行时报错。
解决方案
步骤1:修正GAS代码
补全Spreadsheet实例定义,同时指定响应的MIME类型避免解析异常,修改后代码如下:
// 补全Spreadsheet实例初始化 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('LampV2'); function doGet(e) { return ContentService.createTextOutput(sheet.getRange('A1').getValue()) .setMimeType(ContentService.MimeType.TEXT); } function doPost(e){ var val = e.parameter.value; if (val !== undefined){ sheet.getRange('A1').setValue(val); } return ContentService.createTextOutput(sheet.getRange('A1').getValue()) .setMimeType(ContentService.MimeType.TEXT); }
修改完成后重新部署Web App,确保权限配置为「任何人,甚至匿名用户」可访问。
步骤2:修改ESP32代码,开启自动跟随重定向
在HTTP请求发起前添加重定向跟随配置,修改后的makeGetRequest函数如下:
void makeGetRequest(){ if ((WiFi.status() == WL_CONNECTED)) { HTTPClient http; http.begin("https://script.google.com/macros/s/AKfycbyj0XWD_pLtZkoke3j4rBOf2GcxCQV2Y1qyvszP3lFTfvm6qS-ZONnohTJnQ4lEL2vh_g/exec", ca_cert); // 开启强制跟随重定向,最多跟随2次(GAS仅需1次重定向) http.setFollowRedirects(HTTPC_FORCE_FOLLOW_REDIRECTS); http.setRedirectLimit(2); int httpCode = http.GET(); if (httpCode > 0) { String payload = http.getString(); Serial.println(httpCode); Serial.println(payload); } else { Serial.println("Error on HTTP request"); } http.end(); delay(5000); } }
POST请求的修改逻辑和GET完全一致,同样添加重定向配置即可。修改完成后烧录代码即可正常拿到接口返回的单元格数据。
内容的提问来源于stack exchange,提问作者AERO
相关产品推荐
相关产品推荐

