【问题标题】:HTTP JSON API request responds "-1"HTTP JSON API 请求响应“-1”
【发布时间】:2018-01-03 19:26:11
【问题描述】:

我正在尝试制作一个带有 ESP8266 模块的 Arduino 可以 GET 的 REST API,但是当我尝试向我的服务器发送请求时,我得到的 HTTP 代码是 -1,我没有能够在任何地方找到任何文档(它不在 HTTP 状态代码 here 的列表中)。

我得到-1 响应的测试API 是here,而this API 工作正常。我的 API 很简单:

PHP API:

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *'); 

$array = array(
    "status" => true
);

echo json_encode($array);

Arduino 代码只是 ESP8266 示例之一,如下所示:

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

const char* ssid = "Next-Guest";
const char* password = "";

void setup () {

  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(1000);
    Serial.print("Connecting..");

  }

}

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

    //http.begin("http://jsonplaceholder.typicode.com/users/1"); <- this works
    http.begin("https://makerspace.albe.pw/api/getDoorStatus.php"); // <- this doesn't
    int httpCode = http.GET();

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

我可以使用 jQuery AJAX 从任何计算机本地向我的 API 发出 GET 请求,所以它必须有点开放?

是我的主机有问题,还是我的文件缺少一些标头?

【问题讨论】:

  • http_response_code(200); 放在那里会导致您的发送输出出现问题,请尝试将其移至echo 上方。
  • @LawrenceCherone 响应是否存在,或者我放置它的位置与我测试的结果没有什么不同。结果完全一样。
  • 它是否适用于注释掉的网址?问题可能出在 https 上。
  • @JohnnyMopp 是的,注释掉的网址可以正常工作
  • 不确定,但我认为对于 https,您需要提供足迹。 Simple GET request with ESP8266HTTPClient

标签: php json arduino arduino-esp8266


【解决方案1】:

访问受 SSL 证书 (https) 保护的域时,您需要在 http.begin 函数中指定 SSL 指纹作为第二个参数:

String thumbprint = "the_thumbprint";
http.begin("https://api.site/api/get_details.json", thumbprint);

【讨论】: