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

Denna forumdel är inte längre aktiv, för att diskutera saker relaterat till väder eller temperatur.nu - använd https://www.facebook.com/groups/temperatur.nu
Kategoriregler
Denna forumdel är inte längre aktiv, för att diskutera saker relaterat till väder eller temperatur.nu - använd https://www.facebook.com/groups/temperatur.nu
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 »

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 SGL70 den 24 apr 2019, 09:32, redigerad totalt 2 gång.
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

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

Inlägg av larky »

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 »

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);
Låst