Ich bekomme aber immer eine Fehlermeldung.
HTTP/1.1 502 Bad Gateway
Date: Tue, 10 Nov 2020 12:59:20 GMT
Content-Type: application/json
Content-Length: 36
Connection: keep-alive
x-amzn-RequestId: c00ef469-5d28-4c11-8740-a2125e1d5256
x-amzn-ErrorType: InternalServerErrorException
x-amz-apigw-id: Vys6XGiIFiAFqaA=
{"message": "Internal server error"}HTTP/1.1 502 Bad Gateway
Mit normaler Syntaxe ohne Daten habe ich kein Problem:
Ist es diesmal wenigsten stabile ein 502 Fehler, im letzten Post hast du
noch ziemlich mit allen möglichen Fehlern bei Curl zu Kampfen gehabt?
Mehdi J. schrieb:> HTTP/1.1 502 Bad Gateway
5xx – Server-Fehler : Die Ursache des Scheiterns der Anfrage liegt eher
im Verantwortungsbereich des Servers.
502 – Bad Gateway: Der Server konnte seine Funktion als Gateway oder
Proxy nicht erfüllen, weil er seinerseits eine ungültige Antwort
erhalten hat.
Spreche also mal mit einen Kollegen der den Server aufgesetzt hat. Seht
dort im Log nach was der Server mit den Request gemacht hat und versucht
wenn nötig das Loglevel auf Debug anzuheben.
der Request könnte sogar Korrekt sein, aber Ohne internes Wissen, was
euer Endpoint braucht ist das Raten.
Εrnst B. schrieb:> Json erlaubt keine Newlines in Strings, du wirst im "$D" also \n durch> \\n ersetzen müssen.
Das Kommt Drauf an (TM), in JSON selbst ist es verboten, aber dennoch
kenne ich genügend Implementierungen, den das egal ist.
Imonbln schrieb:> Das Kommt Drauf an (TM), in JSON selbst ist es verboten, aber dennoch> kenne ich genügend Implementierungen, den das egal ist.
Der TE meinte dass sein curl-aufruf mit statischem Daten-String (und
dadurch güligem JSON) funktioniert, und der einzige Unterschied zu
seinem dynamischem curl-Aufruf ist, dass dort die Strings länger sind
und Newlines enthalten (==> ungültiges JSON)
Insofern würde ich schon davon ausgehen, dass das Teil des Problems ist.
Unabhängig davon: Ist ja auch nicht schön, hier wissentlich invalide
Daten zu senden, nur in der Hoffnung dass der Empfänger sich das schon
irgendwie zurechtwurschteln kann.
Ob das ganze dann auf der Applikationsebene auch noch tut, also seine
Sensor-Werte irgendwie sinnvoll in einer Datenbank landen o.Ä., ist
danach eine andere Geschichte.
Mehdi J. schrieb:> ich möchte die Daten in "a" und "D" nach einem Server schicken.> [...]> Ich bekomme aber immer eine Fehlermeldung.
Da Du so freundlich warst, die reale URL zu posten (räusper), war ich
mal so freundlich, ein bisschen herumzuspielen -- und ich glaube, ich
habe den Fehler gefunden: Der Server erwartet den "timestamp" als
Datentyp String und nicht als Integer oder Float.
Weil ich zu faul (und meist auch zu blöd) bin, mir sowas inklusive
Quoting und dem ganzen anderen Hantier als Shellskript zu basteln, hab'
ich mir ein kleines Python-Skriptlein dafür geschrieben, das Du und
andere Interessierte im Anhang finden.
Ja, mein Skriptlein hat ein paar mehr Zeilen als Dein Shellskript, aber
dafür ist ein (mehr oder weniger) sauberes Logging und Exception
Handling eingebaut. Natürlich muß es auch nicht auf STDOUT, sondern kann
auch in eine Datei, ins (r)syslog und / oder das Journal auf
systemd-basierten Systemen loggen (think monitoring, central logging,
...) . Mein Logformat ist deswegen so, weil ich faul bin und die Ausgabe
mit csvlook (aus dem csvkit [1]) und less(1) anschauen wollte.
Ich hab' versucht, möglichst ausführlich zu dokumentieren, was das Ding
tut. Wer Fragen dazu hat, ist natürlich trotzdem immer herzlich
willkommen. ;-)
---8<--
*Dies ist für Leute, die das Skriptchen womöglich ausprobieren wollen.*
Wer dieses Skript ausführen möchte, braucht mindestens: ein System,
unter dem das Programm sensors(1) verfügbar ist und auf dem vor dem
Aufruf meines Skriptleins das Programm sensors-detect(8) aufgerufen
wurde. Die beiden Programme finden sich (zumindest unter
Debian-basierten Linux-Distributionen) im Paket "lm-sensors".
Dann benutze ich -- Faulheit ist nach Larry Wall, dem Erfinder von Perl,
eine der Kardinaltugenden von guten Entwicklern -- ein Package, das
nicht in der Standard-Bibliothek von Python enthalten ist, nämlich das
Paket "requests". In der mit [2] verlinkten Dokumentation gibt es einen
Link "Installation"...
Auf meinen Systemen arbeite ich allerdings immer mit virtualenv und seit
ein paar Jahren mit Python in der Version 3. Wer dazu Fragen hat, ist
herzlich willkommen.
--->8--
[1] https://csvkit.readthedocs.io/en/latest/
[2] https://requests.readthedocs.io/de/latest/