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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kolja L. (kolja82)


Lesenswert?

Nabend nochmal


Ich würde gerne Daten vom ESP auf meinen Webserver übertragen.
Das Script ist recht simpel:
1
void senden()
2
{
3
  WiFiClient client;
4
  const int httpPort = 80;
5
  if (!client.connect(host, httpPort)) {
6
    Serial.println("connection failed");
7
    return;
8
  }
9
10
  scan();
11
12
13
  String url = "/wama/";
14
  url += sendto;
15
  url += "?wama_1=";
16
  url += acc1;
17
  url += "&wama_2=";
18
  url += acc2;
19
20
  client.println();
21
  client.println(String("GET ") + url + " HTTPS/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
22
  Serial.print(String("GET ") + url + " HTTPS/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
23
24
  delay(10);
25
26
  unsigned long timeout = millis();
27
  while (client.available() == 0) {
28
    if (millis() - timeout > 5000) {
29
      Serial.println(">>> Client Timeout !");
30
      client.stop();
31
      return;
32
    }
33
  }
34
  while (client.available()) {
35
    String line = client.readStringUntil('\r');
36
    Serial.print(line);
37
  }
38
39
}

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:
1
15964
2
15796
3
GET /wama/collectdata.php?wama_1=15964&wama_2=15796 HTTPS/1.1
4
Host: www.xxx.xx
5
Connection: close
6
7
HTTP/1.1 400 Bad Request
8
Date: Wed, 16 May 2018 20:38:18 GMT
9
Server: Apache
10
Vary: Accept-Encoding
11
Content-Length: 226
12
Connection: close
13
Content-Type: text/html; charset=iso-8859-1
14
15
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
16
<html><head>
17
<title>400 Bad Request</title>
18
</head><body>
19
<h1>Bad Request</h1>
20
<p>Your browser sent a request that this server could not understand.<br />
21
</p>
22
</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ß

von Oliver S. (phetty)


Lesenswert?

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

von Kolja L. (kolja82)


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.

von Tom (Gast)


Lesenswert?

Der ESP kann https?

von Kolja L. (kolja82)


Lesenswert?

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

: Bearbeitet durch User
von Pop (Gast)


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.

von yesitsme (Gast)


Lesenswert?

1
  url += acc2;
2
3
  client.println();
4
  client.println(String("GET ") + url + " HTTPS/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

->
1
  url += acc2;
2
3
  client.print(String("GET ") + url + " HTTP/1.0\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

Geht das so besser?

von Kolja L. (kolja82)


Lesenswert?

So funktioniert es:
1
void senden()
2
{
3
  WiFiClient client;
4
  const int httpPort = 80;
5
  if (!client.connect(host, httpPort)) {
6
    Serial.println("connection failed");
7
    return;
8
  }
9
10
  scan();
11
12
13
  String url = "/wama/";
14
  url += sendto;
15
  url += "?wama_1=";
16
  url += acc1;
17
  url += "&wama_2=";
18
  url += acc2;
19
20
  client.println();
21
22
  client.println(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
23
  client.println(url.length());
24
  Serial.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
25
26
  delay(10);
27
28
  unsigned long timeout = millis();
29
  while (client.available() == 0) {
30
    if (millis() - timeout > 5000) {
31
      Serial.println(">>> Client Timeout !");
32
      client.stop();
33
      return;
34
    }
35
  }
36
  while (client.available()) {
37
    String line = client.readStringUntil('\r');
38
    Serial.print(line);
39
  }
40
41
}

aber die Waschmaschine wackelt nicht genug :-(

von yesitsme (Gast)


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*

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

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

Und was soll das nach dem Header?
1
  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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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