WiFiClientSecure ESP8266上的400错误请求

问题描述 投票:0回答:1

我试图用ESP8266测试请求,我希望请求使用HTTPS,但请求结果总是400个坏请求,那么是什么原因导致我写的代码错误?

#include <ESP8266WiFi.h>
    #include <WiFiClientSecure.h>

    #ifndef STASSID
    #define STASSID "xxxxxxx"
    #define STAPSK  "xxxxxxxxx"
    #endif

    const char* ssid = "xxxxx";
    const char* password = "xxxxxxxx";

    const char* host = "webhook.site";
    const int httpsPort = 443;



    const char fingerprint[] PROGMEM = "09:F6:00:C3:67:B0:80:14:34:E3:08:D7:4A:64:20:85:83:F4:80:A1";

    void setup() {
      Serial.begin(115200);
      Serial.println();
      Serial.print("connecting to ");
      Serial.println(ssid);
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());

      // Use WiFiClientSecure class to create TLS connection
      WiFiClientSecure client;
      Serial.print("connecting to ");
      Serial.println(host);

      Serial.printf("Using fingerprint '%s'\n", fingerprint);
      client.setFingerprint(fingerprint);

      if (!client.connect(host, httpsPort)) {
        Serial.println("connection failed");
        return;
      }
      delay(500);
       if (client.verify(fingerprint, host)) {
        Serial.println("certificate matches");
      } else {
        Serial.println("certificate doesn't match");
      }
    delay(500);
      String url = "/4cf42a06-5df4-4459-b8f3-5d29f1ed319d";
      Serial.print("requesting URL: ");
      Serial.println(url);


    String request = String("GET ") + url + " HTTP/1.0 \r\n" +
                     "Host: " + host + "\r\n" +
                     "Accept: *" + "/" + "*\r\n" +
                      "User-Agent: BuilderFailureDetectorESP8266\r\n" +
                      "Connection: close\r\n\r\n";
      Serial.println(request);               
      client.print(request);

      Serial.println("request sent");
      int waitcount = 0;
      while (!client.available() && waitcount++ ) {
         delay(10);
    }
      while(client.available()){
        String line = client.readStringUntil('\r');
         Serial.print(line);
    }
      while (client.connected()) {
        String line = client.readStringUntil('\r');
        Serial.println("headers received"+line);
        if (line == "\r") {
          Serial.println("headers received"+line);
          break;
        }
      }

    }

    void loop() {
    }

以下是上述程序的输出

connecting to xxxx
.....
WiFi connected
IP address: 
192.168.1.13
connecting to webhook.site
Using fingerprint '09:F6:00:C3:67:B0:80:14:34:E3:08:D7:4A:64:20:85:83:F4:80:A1'
certificate matches
requesting URL: /4cf42a06-5df4-4459-b8f3-5d29f1ed319d
GET /4cf42a06-5df4-4459-b8f3-5d29f1ed319d HTTP/1.0 
Host: webhook.site
Accept: */*
User-Agent: BuilderFailureDetectorESP8266
Connection: close


request sent
HTTP/1.0 400 Bad request
Cache-Control: no-cache
Connection: close
Content-Type: text/html

<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>

我的代码有问题吗?每个人都可以帮助我吗??? ...我正在寻找Google上几个帖子中的以下示例

arduino esp8266 nodemcu arduino-esp8266
1个回答
1
投票

关于空白,HTTP可能非常苛刻。在你的行

String request = String("GET ") + url + " HTTP/1.0 \r\n" +

HTTP/1.0之后有一个不必要的空间。删除空格,您应该通过“400 Bad request”响应。

String request = String("GET ") + url + " HTTP/1.0\r\n" +
© www.soinside.com 2019 - 2024. All rights reserved.