mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Werte vom ESP an Webserver übertragen - Bad Request


Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend nochmal


Ich würde gerne Daten vom ESP auf meinen Webserver übertragen.
Das Script ist recht simpel:
void senden()
{
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  scan();


  String url = "/wama/";
  url += sendto;
  url += "?wama_1=";
  url += acc1;
  url += "&wama_2=";
  url += acc2;

  client.println();
  client.println(String("GET ") + url + " HTTPS/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  Serial.print(String("GET ") + url + " HTTPS/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

  delay(10);

  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

}

Leider werden keine Daten in die Datenbank eingetragen,
was auf manuellem Wege im Browser jedoch funktioniert.

Über die serielle Ausgabe bekomme ich folgendes zu lesen:
15964
15796
GET /wama/collectdata.php?wama_1=15964&wama_2=15796 HTTPS/1.1
Host: www.xxx.xx
Connection: close

HTTP/1.1 400 Bad Request
Date: Wed, 16 May 2018 20:38:18 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

Die Funktion Scan() schreibt die beiden Zahlen in die Ausgabe und in die 
beiden Variablen.

Kan jemand von euch etwas mit dieser "Fehlermeldung" anfangen?

Danke und Gruß

Autor: Oliver S. (phetty)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm stattdessen mqtt, ist erstmal was komplizierter aber zum übertragen 
von Messwerten sinnvoller.

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis, aber das Skript, die Datenbank, die Auswertung 
und die Webseite sind schon fertig.
Daher würde ich, wenn der Fehler nicht grundlegend ist, gerne diesen Weg 
weitergehen.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ESP kann https?

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Webseite zumindest nicht...
Aber auch ohne das "S" in dem Aufruf gibt es den selben Fehler

: Bearbeitet durch User
Autor: Pop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suche den Fehler PHP seitig auf dem Webserver mit den unter Linux 
Bekannten Möglichkeiten.

Tcpdump | Grep wama, etc...
Hier scheint das Problem zu liegen.

Autor: yesitsme (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  url += acc2;

  client.println();
  client.println(String("GET ") + url + " HTTPS/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

->
  url += acc2;

  client.print(String("GET ") + url + " HTTP/1.0\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

Geht das so besser?

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So funktioniert es:
void senden()
{
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  scan();


  String url = "/wama/";
  url += sendto;
  url += "?wama_1=";
  url += acc1;
  url += "&wama_2=";
  url += acc2;

  client.println();

  client.println(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  client.println(url.length());
  Serial.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

  delay(10);

  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

}

aber die Waschmaschine wackelt nicht genug :-(

Autor: yesitsme (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm... du haust dem Server immer noch als erstes einen Zeilenumbruch um 
die Ohren... Ich denke es is nur eine Frage der Zeit bis das kaputt 
geht.

Kolja L. schrieb:
> aber die Waschmaschine wackelt nicht genug :-(

Einfach die Transportsicherung wieder reinschrauben... *duck und 
wegrenn*

Autor: Sascha W. (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie yesitsme schon schrieb,
  client.println();
hat vor dem Header nichts zu suchen.

Und was soll das nach dem Header?
  client.println(url.length());

Sascha

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.