使用Arduino草图修复php检索。他在工作,现在坏了

使用Arduino草图修复php检索。他在工作,现在坏了,php,http,ssl,arduino,esp8266,Php,Http,Ssl,Arduino,Esp8266,正如标题所示,我设置了一个Arduino草图,使用SSL访问我的web服务器,打算从php脚本中检索输出值。它一直工作到2019年9月19日星期四凌晨2点左右,但在接下来的8个小时内,它停止了。那天早上,我的主机提供商进行了重大更新,我认为现在某个地方出现了不兼容。下面,我不包括所有的代码,只包括应该相关的部分。我已经排除了关于建立wifi连接、我的NTP配置以及关于在NeoPixel中使用返回值的部分。我将client.setunsecure设置为不安全,因为我的证书和指纹更改非常频繁。这也适

正如标题所示,我设置了一个Arduino草图,使用SSL访问我的web服务器,打算从php脚本中检索输出值。它一直工作到2019年9月19日星期四凌晨2点左右,但在接下来的8个小时内,它停止了。那天早上,我的主机提供商进行了重大更新,我认为现在某个地方出现了不兼容。下面,我不包括所有的代码,只包括应该相关的部分。我已经排除了关于建立wifi连接、我的NTP配置以及关于在NeoPixel中使用返回值的部分。我将client.setunsecure设置为不安全,因为我的证书和指纹更改非常频繁。这也适用于服务器维护之前。显示的指纹是较旧的指纹。可能有些代码是不必要的,但我发现如果我去掉处理指纹的行,连接就会失败

如果我从浏览器访问URL,我会返回正确的数字,但是使用Arduino,我会得到DOCTYPE行。我最初在代码中使用了HTTP/1.0,并且它可以正常工作。问题开始后,1.0或2.0都不起作用

我的主机提供商说: Apache版本2.4.39 PHP版本7.3.8

我得到的不是一个简单的数字,而是:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

草图:

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

const char* host = "battletech-live.net";
const int httpsPort = 443;
String url = "/assets/scripts/php/checkTasks.php?action=getRows&uid=esp8266";
// SHA1 fingerprint of the certificate
char fingerprint[] PROGMEM = "44 DD B9 73 04 F8 EE 6B 0A 01 76 F2 98 34 F7 DE 43 60 11 54";

void setup() {
    Serial.begin(115200);
    WiFiClientSecure client;
    client.setInsecure();

    if (client.connect(host, httpsPort)) {
        Serial.println("connected");

        String request = String("GET ") + url + " HTTP/1.0 \r\n" +
                "Host: " + host + "\r\n" +
                "Connection: close\r\n\r\n";
        client.print(request);
        String line = client.readStringUntil('\n');
        Serial.println(line);
    } else {
        Serial.println("connected failed");
    }
}

void loop() {
    getPendingTasks();
}

void getPendingTasks() {
    WiFiClientSecure client;
    client.setInsecure();
    client.setFingerprint(fingerprint);
    if (client.connect(host, httpsPort)) {
        String request = String("GET ") + url + " HTTP/1.0 \r\n" +
                "Host: " + host + "\r\n" +
                "Connection: close\r\n\r\n";
        client.print(request);
        String line = client.readStringUntil('\n');
        Serial.println(line);
    }
}
#包括
#包括
const char*host=“battletech live.net”;
常数int httpsPort=443;
字符串url=“/assets/scripts/php/checkTasks.php?action=getRows&uid=esp8266”;
//SHA1证书的指纹
字符指纹[]PROGMEM=“44 DD B9 73 04 F8 EE 6B 0A 01 76 F2 98 34 F7 DE 43 60 11 54”;
无效设置(){
序列号开始(115200);
WiFiClientSecure客户端;
client.setunsecure();
if(客户端连接(主机,httpsPort)){
Serial.println(“已连接”);
字符串请求=字符串(“获取”)+url+“HTTP/1.0\r\n”+
主机:“+Host+”\r\n+
“连接:关闭\r\n\r\n”;
客户。打印(请求);
String line=client.readStringUntil('\n');
串行打印LN(行);
}否则{
Serial.println(“连接失败”);
}
}
void循环(){
getPendingTasks();
}
void getPendingTasks(){
WiFiClientSecure客户端;
client.setunsecure();
客户端。设置指纹(指纹);
if(客户端连接(主机,httpsPort)){
字符串请求=字符串(“获取”)+url+“HTTP/1.0\r\n”+
主机:“+Host+”\r\n+
“连接:关闭\r\n\r\n”;
客户。打印(请求);
String line=client.readStringUntil('\n');
串行打印LN(行);
}
}

我怀疑String line=client.readStringUntil('\n');正在捕获标题行并丢弃我想要的值,但奇怪的是它工作了,但现在没有。标题信息对我来说基本上是无用的,当我从浏览器点击URL时,我看不到这些信息。400错误请求错误请求您的浏览器发送了一个此服务器无法理解的请求。

此外,尝试使用ErrorDocument处理请求时遇到400错误请求。


Apache服务器位于host2011.hostmonster.com端口443