Hallo zusammen,
mein Ziel ist es mit dem ESP Daten via POST zu senden. In der Grundform wie z.B hier beschrieben (hierauf basiert auch mein Code) funktioniert es auch. Allerdings (sofern ich richtig informiert bin) kann man doch auch bei POST den Daten "Felder" zuordnen und hierbei habe ich Probleme dies zu realisieren.
Als Server der die Daten entgegennimmt hab ich zum Testen einen kleinen Flask Server im Betrieb - dies kommt später aber so nicht in Verwendung:
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["GET"])
def index():
if request.method == "GET":
name = request.args.get("name")
print("Datensatz Name: {}".format(name))
return "Daten verarbeitet"
@app.route('/post', methods=["POST"])
def post():
#print(request.data)
print(request.form["text"])
return ''
if __name__ == "__main__":
app.run(host="192.168.178.22", port=1337, debug=True)
Alles anzeigen
Mein Problem ist, dass er mir sagt das bei der Übertragung kein Text Feld existiert, somit vermute ich mal das ich einen Fehler im ESP Code habe.
Fehlermeldung:
192.168.178.44 - - [17/Nov/2018 12:38:17] "POST /post HTTP/1.1" 500 -
Traceback (most recent call last):
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\hofei\Anaconda3\lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "D:\data_owncloud\Git\hofeibib\flask_test\hello.py", line 17, in post
print(request.form["text"])
File "C:\Users\hofei\Anaconda3\lib\site-packages\werkzeug\datastructures.py", line 431, in __getitem__
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'text'
Alles anzeigen
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200); //Serial connection
WiFi.begin("***", "***"); //WiFi connection
while (WiFi.status() != WL_CONNECTED) { //Wait for the WiFI connection completion
delay(500);
Serial.println("Waiting for connection");
}
}
void loop() {
if(WiFi.status()== WL_CONNECTED){ //Check WiFi connection status
HTTPClient http; //Declare object of class HTTPClient
http.begin("http://192.168.178.22:1337/post"); //Specify request destination
http.addHeader("Content-Type", "text/plain"); //Specify content-type header
int httpCode = http.POST("text=Message from ESP8266&test=Testmassage"); //Send the request
String payload = http.getString(); //Get the response payload
Serial.println(httpCode); //Print HTTP return code
Serial.println(payload); //Print request response payload
http.end(); //Close connection
}else{
Serial.println("Error in WiFi connection");
}
delay(30000); //Send a request every 30 seconds
}
Alles anzeigen
In Zeile Nummer 27, wo so denke ich der Schlüssel liegt, habe ich auch schon mehrere Variationen versucht wie:
int httpCode = http.POST("&text=Message from ESP8266&test=Testmassage");
Wo liegt mein Fehler?