[Löst/Work around] HTTP POST - Kan inte matcha stad och id!

Saknar du något på temperatur.nu? Har du hittat en ny vädersida som du tycker bör finnas med på temperatur.nu? Förstår du inte hur en viss funktion fungerar?

Moderator: elf98

Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
SGL70
Gillar hemautomation
Inlägg: 37
Blev medlem: 22 apr 2019, 00:07

[Löst/Work around] HTTP POST - Kan inte matcha stad och id!

Inlägg av SGL70 » 23 apr 2019, 21:15

Hej!

Jag försöker få min Wemos D1 mini att rapportera temperaturen via url, men jag gör någon galet när jag anropar rapportera.php.

Anropet är detta: www.temperatur.nu/rapportera.php?hash=b ... temperatur>.
(har bytt de sista siffrorna i hashen, mot nollor)

Stationen är denna: https://www.temperatur.nu/ranekolen.html

För att åstadkomma detta försöker jag använda mig av HTTP POST som ser ut så här:

Kod: Markera allt

"POST /rapportera.php HTTP/1.1
Host: temperatur.nu
Content-Type: application/x-www-form-urlencoded
Content-Length: 43

hash=ba79c368433558812aca752110000000&t=4.5

"
Tråkigt nog får jag ett felmeddelande att det inte går att matcha stad och id. Här är outputen från min kära Wemos:

Kod: Markera allt

Connecting to RNG
..
WiFi connected
IP address: 
192.168.1.210
Connecting to www.temperatur.nu

Svar från server:

HTTP/1.1 200 OK
Date: Tue, 23 Apr 2019 19:03:49 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=d42487f78ead7ddfc8924a14814975be11556046229; expires=Wed, 22-Apr-20 19:03:49 GMT; path=/; domain=.temperatur.nu; HttpOnly
Server: cloudflare
CF-RAY: 4cc219857d32cad6-ARN

31
Fatal, failure! Kan inte inte matcha stad och id!
0
Däremot funkar det att köra detta från browsern "www.temperatur.nu/rapportera.php?hash=b ... 0000&t=6.6", vilket ger svaret "ok! (6.6.)".

Någon fler som stött på detta?

Ha det!
Greger

Hela sketchen här:

Kod: Markera allt

#include "ESP8266WiFi.h"
#include "Ticker.h"

Ticker schedule;

const char* ssid     = "RNG";
const char* password = "pwd";

String hash = "ba79c368433558812aca75210000000";//Maskad hash
String temp = "4.5";
bool transmit = false;



void report() {
  transmit = true;
}

void setup() {
  Serial.begin(115200);
  delay(100);

  // We start by connecting to a WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  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());

  schedule.attach(60, report); //Rapportera enligt intervall
}

void loop() {

  if (transmit)
  {
    schedule.detach(); // Pausa tickern
    
    WiFiClient client; 
    Serial.print("Connecting to ");
    Serial.println(host);

    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
      Serial.println("connection failed");
      return;
    }

    String hashParam = "hash=";
    hashParam += hash;
    String tempParam = "&t=";
    tempParam += temp;
    String data = hashParam + tempParam;

    Serial.print("Requesting POST: ");
    // POST /rapportera.php HTTP/1.1\r\nHost: temperatur.nu\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 43\r\n\r\nhash=ba79c368433558812aca75211d7da250&t=3.3\r\n\r\n)
    String request;
    request = "POST /rapportera.php HTTP/1.1";
    request += ("\r\n");
    request += ("Host: temperatur.nu");
    request += ("\r\n");
    request += ("Content-Type: application/x-www-form-urlencoded");
    request += ("\r\n");
    request += ("Content-Length: ");
    request += (data.length());
    request += ("\r\n");
    request += ("\r\n");
    request += (data);
    request += ("\r\n");
    request += ("\r\n");

    /*Serial.println();
    Serial.println(request);
    Serial.println(); */

    // skicka request till server:
    client.print(request);
    
    Serial.println("Svar från server:");

    unsigned long timeout = millis();
    while (client.available() == 0) {
      if (millis() - timeout > 5000) {
        Serial.println(">>> Client Timeout !");
        client.stop();
        return;
      }
    }

    // Läs svar och skriv till Serial
    while (client.available()) {
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }
    client.stop();
    //schedule.attach(60, report);
    transmit = false;
  }
}
Senast redigerad av 2 SGL70, redigerad totalt 24 gång.

larky
Moderator
Inlägg: 1044
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: Fatal fauilure! Kan inte matcha stad och id!

Inlägg av larky » 24 apr 2019, 08:13

Testa HTTP get?

SGL70
Gillar hemautomation
Inlägg: 37
Blev medlem: 22 apr 2019, 00:07

Re: Fatal fauilure! Kan inte matcha stad och id!

Inlägg av SGL70 » 24 apr 2019, 09:30

Nog är jag ny på HTTP requests å så, men den borde jag ju tänkt på.....

GET funkar. Denna request:

Kod: Markera allt

"GET /repportera.php?hash=ba79c368433558812aca752110000000&t=4.5 HTTP/1.1
Host: temperatur.nu

"
ger svaret "ok! (4.5)":

Kod: Markera allt

Connecting to RNG
..
WiFi connected
IP address: 
192.168.1.210
Connecting to www.temperatur.nu
Requesting GET: Svar från server:
HTTP/1.1 200 OK
Date: Wed, 24 Apr 2019 07:23:09 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=d8be52a45d7f8fcf5a52b577dba68954b1556090588; expires=Thu, 23-Apr-20 07:23:08 GMT; path=/; domain=.temperatur.nu; HttpOnly
Server: cloudflare
CF-RAY: 4cc65482186fcb0e-ARN

9
ok! (4.5)
0
Tack å bock!

Dags att koppla ihop det hela med en A6 Pro GSM/GPRS modul å få samma funktion medelst AT-kommandon...

Med blossande kinder,
Greger

EDIT: Relevant sktechdel, för den läslystne:

Kod: Markera allt

    String request;
    request = "GET /rapportera.php?hash=";
    request += hash;
    request += "&t=";
    request += temp;
    request += " HTTP/1.1";
    request += ("\r\n");
    request += ("Host: temperatur.nu");
    request += ("\r\n");
    request += ("\r\n");

    // skicka request till server:
    client.print(request);

Skriv svar