Forum: Mikrocontroller und Digitale Elektronik SIM7070G und HTTP Probleme


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 Andreas R. (andi_ruetten)


Lesenswert?

Hallo,
ich habe folgendes Problem:

Ich möchte Daten via get an einen HTTP Server senden.
Wenn ich die direkte IP zum HTTP verwende ( vom Hoster bekommen)
dann funktioniert auch alles wie gewünscht.
Wenn ich den HTTP connect aber über die url mache, dann gibt es einen
HTTP Statuscode 302 zurück.
->


OK
AT+SHREQ="/p_ss?12345678,01,0c,3c,01,02,0352",1
OK

+SHREQ: "GET",302,0
AT+SHRHEAD
ERROR

Es gibt also eine temporäre Weiterleitung. Da die Länge 0 ist, kann man 
den response value mit  AT+SHREAD nicht auslesen.

Und AT+SHRHEAD gibt einen Error.
Wie komme ich nun an die IP Adresse der Weiterleitung?

Andreas

von Dennis (sixeck)


Lesenswert?

Sicher, dass das kein http -> https redirect ist? Dann ist die IP die 
gleiche…

von Andreas R. (andi_ruetten)


Lesenswert?

Dennis schrieb:
> Sicher, dass das kein http -> https redirect ist? Dann ist die IP die
> gleiche…

Nein kein HTTPS, ganz sicher!

Ist ein "vitueller" server von ionos, ich denke das hat etwas damit zu 
tun...

Andreas

von Gerd E. (robberknight)


Lesenswert?

Ich könnte mir gut vorstellen dass der da integrierte HTTP-Stack 
ziemlich begrenzt in seinen Möglichkeiten und Standardkonformität ist. 
Solange Du den vollständigen Server (und dessen IP) unter Kontrolle hast 
mag das angehen. Wenn Du es aber mit gängigen Webhostern zu tun hast 
wird das schon deutlich schwerer. Vor allem auch weil Du immer mit dem 
Risiko lebst dass etwas, was heute noch funktioniert, ohne jegliche 
Ankündigung oder Rollback-Möglichkeit durch ein Update des Hosters 
gestört wird.

Mein Vorschlag daher: Lass deren IP- und HTTP-Stack gut sein und nimm 
Deinen eigenen. Wähl Dich statt dessen über dieses Mobilfunkmodem per 
PPP selbst ein und mach das IP und HTTP selbst. Dann hast Du es 
vollständig selber in der Hand was der Client macht und kannst es bei 
Bedarf auch selber anpassen.

Oder wenn das nicht geht, dann nimm den Server selber in die Hand. Miete 
Dir eine virtuelle Maschine oder so und bau dort Deinen eigenen Server 
auf. Den könntest Du z.B. auch als Proxy verwenden über den das 
beschränkte Modul mit dem eigentlichen Server kommunizieren kann. Da das 
dann aber offen im Internet hängt - immer das Thema Sicherheit von 
Anfang an mit bedenken.

: Bearbeitet durch User
von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Andreas R. schrieb:
> Es gibt also eine temporäre Weiterleitung. Da die Länge 0 ist, kann man
> den response value mit  AT+SHREAD nicht auslesen.
>
> Und AT+SHRHEAD gibt einen Error.

AT+SHRHEAD gibt es beim 7070 nicht. Header, Body und ein bisschen 
Metadata sollten mit AT+SHREAD gelesen werden ("SIM7070 SIM7080 SIM7090 
Series AT Command Manual", "SIM7070 SIM7080 SIM7090 Series HTTP(S) 
Application Note").

> Wie komme ich nun an die IP Adresse der Weiterleitung?

Erst mal schauen was der Server wirklich antwortet. Sende den gleichen 
Request vom einem normalen Rechner mit curl und lass dir von curl die 
Result-Header anzeigene (-i Option) und am besten noch Verbose (-v). 
Vielleicht noch Wireshark nebenbei laufen lassen.

Du suchst den Location: Header in der Antwort. Wenn der da ist, dann 
spinnt das Modem. Wenn er fehlt habe mal ein Wort mit dem ionos-Support, 
wie die sich das so vorstellen.

Probier auch mal ein Beispiel aus den Application Notes, ob dein Modem 
überhaupt so funktioniert wie SIMCom behauptet.

von Andreas R. (andi_ruetten)


Lesenswert?

Hannes J. schrieb:

>> Es gibt also eine temporäre Weiterleitung. Da die Länge 0 ist, kann man
>> den response value mit  AT+SHREAD nicht auslesen.
>>
>> Und AT+SHRHEAD gibt einen Error.
>
> AT+SHRHEAD gibt es beim 7070 nicht.
Doch laut SIM7070_SIM7080_SIM7090 Series_AT Command Manual_V1.07 schon 
...


Header, Body und ein bisschen
> Metadata sollten mit AT+SHREAD gelesen werden ("SIM7070 SIM7080 SIM7090
> Series AT Command Manual", "SIM7070 SIM7080 SIM7090 Series HTTP(S)
> Application Note").

Das Problem ist das
+SHREQ: "GET",302,0   eben anzeigt, das es 0 bytes zu lesen gibt.

>
>> Wie komme ich nun an die IP Adresse der Weiterleitung?
>
> Erst mal schauen was der Server wirklich antwortet. Sende den gleichen
> Request vom einem normalen Rechner mit curl

* Request completely sent off
< HTTP/1.1 302 Found
< Content-Type: text/html
< Content-Length: 0
< Connection: keep-alive
< Keep-Alive: timeout=15
< Date: Tue, 07 Jan 2025 15:12:09 GMT
< Server: Apache
< Cache-Control: no-cache

Das hier scheint das Problem zu sein :
Content-Length: 0


>
> Du suchst den Location: Header in der Antwort. Wenn der da ist, dann
> spinnt das Modem. Wenn er fehlt habe mal ein Wort mit dem ionos-Support,
> wie die sich das so vorstellen.
>
> Probier auch mal ein Beispiel aus den Application Notes, ob dein Modem
> überhaupt so funktioniert wie SIMCom behauptet.
Tut es ja, wenn ich die IP Adresse direkt eingebe.

Andreas

von Andreas R. (andi_ruetten)


Lesenswert?

Gerd E. schrieb:

> Mein Vorschlag daher: Lass deren IP- und HTTP-Stack gut sein und nimm
> Deinen eigenen. Wähl Dich statt dessen über dieses Mobilfunkmodem per
> PPP selbst ein und mach das IP und HTTP selbst.
Auf dem Ziel uC wird ein TCP/IP Stack auf keinen Fall passen.
Wir reden hier von kleinen IOT Geräten.


> vollständig selber in der Hand was der Client macht und kannst es bei
> Bedarf auch selber anpassen.
Das Problem, bleibt doch dann das gleiche, oder nicht?
Über die DNS Anfrage gibt es eine IP von dem hoster, und wenn die 
aufgerufen
wird, dann gibt es doch diese Weiterleitung. Oder ist das nur bei HTTP 
Servern so?

>
> Oder wenn das nicht geht, dann nimm den Server selber in die Hand. Miete
> Dir eine virtuelle Maschine oder so und bau dort Deinen eigenen Server
> auf.
Genau das haben wir ja.


Andreas

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Andreas R. schrieb:
>> AT+SHRHEAD gibt es beim 7070 nicht.
> Doch laut SIM7070_SIM7080_SIM7090 Series_AT Command Manual_V1.07 schon

Dann viel Spaß heraus zu finden ab welcher Firmware-Version das so ist 
und notfalls ein Firmware-Update von SIMCom zu bekommen.

> * Request completely sent off
> < HTTP/1.1 302 Found
> < Content-Type: text/html
> < Content-Length: 0
> < Connection: keep-alive
> < Keep-Alive: timeout=15
> < Date: Tue, 07 Jan 2025 15:12:09 GMT
> < Server: Apache
> < Cache-Control: no-cache
>
> Das hier scheint das Problem zu sein :
> Content-Length: 0

Nein, ist es nicht. Nochmal, für eine automatische Redirection wird der 
Location: Header benötigt. Der ist zwar optional, "SHOULD" laut RFC, 
aber ohne den wird die Redirection "schwierig". Wo hin gehen wenn nicht 
gesagt wird wohin? Der Header scheint hier zu fehlen.

Der Body ist davon unabhängig.  Das es hier gar keinen gibt 
(Content-Length: 0) ist unerheblich, er würde sowieso ignoriert werden:

Es darf, aber muss nicht, eine URL im Body stehen, und dann wäre 
Content-Lenght > 0. Aber diese URL müsste ein Client mit einer Heuristik 
im Body suchen und entsprechend des Content-Type raus parsen (hier 
HTML). Denn der Body sollte für Menschen lesbar sein. Da kann also alles 
Mögliche an Schwafel-Text um die neue URL (und weitere URLs) stehen. 
Deshalb ignoriert man bei einer Maschine-zu-Maschine Kommunikation (IoT, 
etc.) den Body bei 302. Wenn keiner da ist ist das auch OK.

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Andreas R. schrieb:
> Request completely sent off
> < HTTP/1.1 302 Found
> < Content-Type: text/html
> < Content-Length: 0
> < Connection: keep-alive
> < Keep-Alive: timeout=15
> < Date: Tue, 07 Jan 2025 15:12:09 GMT
> < Server: Apache
> < Cache-Control: no-cache
>
> Das hier scheint das Problem zu sein :
> Content-Length: 0

Das ist schon richtig, es gibt ja keinen menschenlesbaren Inhalt. Aber 
Du hast ein Problem mit der Apache-Config oder .htaccess-Datei oder 
einen Proxy, der den Location-Header wegfiltert.

von Gerd E. (robberknight)


Lesenswert?

Andreas R. schrieb:
>> Oder wenn das nicht geht, dann nimm den Server selber in die Hand. Miete
>> Dir eine virtuelle Maschine oder so und bau dort Deinen eigenen Server
>> auf.
> Genau das haben wir ja.

Ok, also eine virtuelle Maschine unter Deiner vollen Kontrolle und kein 
shared hosting oder vom Hoster verwalteter Webserver?

Dann könntest Du ja einfach mal auf Deinem virtuellen Server ein tcpdump 
machen und ne .pcap rausschreiben während Du den Request von dem 
SIM7070G machst. Das kannst Du dann hinterher auf Deinem PC im Wireshark 
anschauen und dann siehst Du genau was an Daten übertragen wurde.

Im Vergleich zu Tests mit curl etc. siehst Du genau was bei dem Request 
vom SIM7070G passiert und simulierst das nicht nur.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.