php - 使用 HTTP POST REQUEST 将数据从 ESP8266 发送到 Live Server 的问题
问题描述
我需要将数据从 esp8266 发送到 000webhostapp。000webhostapp 使用 https 与服务器的所有连接工作正常,但数据发送不工作。
我尝试了几个代码。使用获取请求或发布请求,但它们都没有正常工作。我已经更改了 esp 或 http 的 http 版本,但这也不起作用。
这是代码
#include "DHTesp.h"
#include "ESP8266WiFi.h"
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif
DHTesp dht;
const char* ssid = "*****";
const char* password = "****";
const char server[] = "biracial-conspiracy.000webhostapp.com";
WiFiClient client;
void setup()
{
Serial.begin(9600);
Serial.println();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Connect to the network
Serial.print("Connecting to ");
Serial.print(ssid); Serial.println(" ...");
int i = 0;
while (WiFi.status() != WL_CONNECTED) { /* Wait for the Wi-Fi to
connect*/
delay(1000);
Serial.print(++i); Serial.print(' ');
}
Serial.println("wl connected");
Serial.println("");
Serial.println("Credentials accepted! Connected to wifi\n ");
Serial.println("");
Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex
(C)\t(F)");
dht.setup(2, DHTesp::DHT22); // Connect DHT sensor to GPIO 17
}
void loop()
{
if (client.connect(server, 80)) {
Serial.println("connected to server");
int humidity = dht.getHumidity();
int temperature = dht.getTemperature();
Serial.print("Humidity : ");
Serial.print(humidity);
Serial.print("\t");
Serial.print(" Temperature in Celcius : ");
Serial.print(temperature);
Serial.print("\t");
Serial.print(" Moisture: ");
Serial.println(analogRead(A0));
HTTPClient http;
int moisture = analogRead(A0);
String data = "temp=" + String(temperature) + "&moisture=" +
String(moisture) + "&humidity=" + String(humidity);
client.println("POST firebase.php HTTP/1.1");
client.println("Host: biracial-conspiracy.000webhostapp.com\n");
client.println("User-Agent: ESP8266/1.0");
client.println("connection: close");
client.status();
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.print(data.length());
client.print("\n\n");
client.print(data);
delay(1000);
Serial.println("\n");
Serial.println("Data sending is : ");
Serial.println(data);
Serial.println("The byte is : ");
Serial.println(data.length());
client.stop();
}
else
{
Serial.println("Server Error.");
}
}
解决方案
您不能使用 WiFiClient 连接到HTTPS。您需要使用带有 TLS 的客户端库(例如WiFiClientSecure)来连接到 HTTPS 服务器。
推荐阅读
- selenium - IEdriver 快让我发疯,严重发疯
- android - Android Studio 中 build.gradle 和 R.java 文件的重要性是什么?
- excel - isnumber 公式在数字存在时提取某些值,在文本字符串存在时提取其他值?
- python - 基于特定组(例如类别动作)在python中创建条形图并根据持续时间显示电影的所有名称
- android - 无法使用 vararg 参数调用函数,而不是来自 java 的 vararg 参数
- c# - 在组件上画线
- arrays - NSDictionary Swift 4
- powershell - 如何使用 Powershell 在 OneNote 文件中搜索文本
- git - Git 从提交历史中删除文件
- curl - 卷曲下载档案的一小部分