Всем доброго дня!
Сломал мозг.
Использую ESP-07 она же ESP8266…
Проблема с отправкой post запроса на внешний собственный ресурс.
На примере стандартного примера с правкой под мои нужды:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define SERVER_IP "http://selhom.ru/r.php"
#ifndef STASSID
#define STASSID "AndroidAP"
#define STAPSK "qwerty12"
#endif
void setup() {
Serial.begin(115200);
WiFi.begin(STASSID, STAPSK);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
if ((WiFi.status() == WL_CONNECTED)) {
WiFiClient client;
HTTPClient http;
Serial.print("[HTTP] begin...\n");
http.begin(client, SERVER_IP);
http.addHeader("Content-Type", "application/json");
Serial.print("[HTTP] POST...\n");
int httpCode = http.POST("{\"hello\":\"world\"}");
if (httpCode > 0) {
Serial.printf("[HTTP] POST... code: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK) {
const String& payload = http.getString();
Serial.println("received payload:\n<<");
Serial.println(payload);
Serial.println(">>");
}
} else {
Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
delay(10000);
}
получаю ответ 403, нет доступа.
Создал на компе простой код js пост запроса:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>module_name</title>
<style>
html {font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center; }
body {margin-top: 50px; background-color: #F5F5DC; }
h1 {color: #444444; margin: 50px auto 30px; }
h2 {color: #444444; margin-bottom: 20px; font-size: 20px; }
p {font-size: 14px; color: #888; margin-bottom: 10px; }
</style>
</head>
<body>
<h1><span id="module_name">module_name</span></h1>
<h2>Серийный номер: <span id="uin">uin</span></h2>
<p id="kod"></p>
<p id="message"></p>
<script>
let xhr = new XMLHttpRequest();
let json = JSON.stringify({
"kod":"ping"
});
//xhr.open("POST", 'http://httpbin.org/post');
xhr.open("POST", 'http://selhom.ru/r.php');
xhr.setRequestHeader('Content-type', 'application/json');
xhr.responseType = 'json';
xhr.onload = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = xhr.response;
document.getElementById("kod").innerHTML = response.kod;
document.getElementById("uin").innerHTML = "110100000001";
document.getElementById("message").innerHTML = response.message;
};
};
xhr.send(json);
</script>
</body>
</html>
все работает замечательно.
При этом разрешаю CORS файлом .htaccess:
Header always set Access-Control-Allow-Origin: "*"
Header always set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Header always set Access-Control-Allow-Headers: "*"
Пробовал отправлять post на ресурс http://httpbin.org/post, улетает и прилетает с esp так же без ошибок.
Что где нужно еще покрутить, чтобы с устройства по http://selhom.ru/r.php улетал post запрос без ошибок?
Так же пробовал шапку дописывать:
http.addHeader("Accept", "*/*");
http.addHeader("Accept-Encoding", "gzip, deflate");
http.addHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
http.addHeader("Content-Type", "application/json");
http.addHeader("Connection", "keep-alive");
http.addHeader("Origin", "null");
http.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0");
но и от этого толку ноль, что-то еще не пускает.