Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

POST Methode bei Handy-Browser

Ihr habe noch Fragen zum AVR Webmodule? Dann seit Ihr hier genau richtig!
Antworten
  • Druckansicht
Erweiterte Suche
15 Beiträge • Seite 1 von 1
frecherluemmel
Beiträge: 14
Registriert: 13.01.2009, 14:03:04

POST Methode bei Handy-Browser

  • Zitieren

Beitrag von frecherluemmel » 06.01.2010, 19:09:12

Hallo liebe Gemeinde,

ich kämpfe seit längeren mit diversen Handy-Browsern sie dazu zubewegen das
sie meinen Webserver entsprechend ansteuern....

Meine diversen Seiten sind auf der SD-Karte und werden mit allen üblichen PC/MAC/Linux
Browsern richtig dargestellt und die POST-Methode der Schalter funktionieren auch ein-
wandfrei!

Nur bei Handy-Browsern, sei es unter WM, Android, IPhone, Sebian da will kein einziger
meine entsprechenden POST richtig aussenden.... und somit kann ich auch keine
Ports setzen oder löschen.

Ich verwende grafische Buttons die per JS gesetzt werden (siehe auch: http://ulrichradig.de/forum/viewtopic.php?p=5026#p5026)

Wie geschrieben, am PC gehts einwandfrei

Leider kann ich die POST Ausgabe ja sehr schlecht debuggen...

Wer kann mir den einen Tip geben?

vielen Dank
Zuletzt geändert von frecherluemmel am 09.01.2010, 09:29:22, insgesamt 1-mal geändert.
Nach oben

frecherluemmel
Beiträge: 14
Registriert: 13.01.2009, 14:03:04

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von frecherluemmel » 06.01.2010, 20:20:43

Achso hier ist mal ein Auszug aus meinem HTML-Code;

Im Head-Teil:

<script type="text/javascript" language="JavaScript">

function send(pin)
{
//
var OUT = document.createElement("INPUT");
OUT.type = "hidden";
OUT.value = pin;
OUT.name = "OUT";
document.getElementById("Digitalform").appendChild(OUT);
//
var SUB = document.createElement("INPUT");
SUB.type = "hidden";
SUB.value = "x";
SUB.name = "SUB";
document.getElementById("Digitalform").appendChild(SUB);
document.getElementById("Digitalform").submit()
}

</script>

Im Body-Teil:

<form id="Digitalform" method="post" action="" accept-charset="ISO-8859-1">
...
...

Und letztendlich:
...
<td><img src="%PORTD7" name="pd7" onClick="send('H');"></img></td>
...
Nach oben

Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von Thomas » 06.01.2010, 22:34:25

Leider kann ich die POST Ausgabe ja sehr schlecht debuggen...
Gibt bestimmt einen TCP-Sniffer für mindestens eine der erwähnten Plattformen.
<form id="Digitalform" method="post" action="" accept-charset="ISO-8859-1">
Gib mal bei action die URI an. Leer wäre es zwar korrekt, aber ich meine in diesem Zusammenhang schon mal Probleme mit dem IE in WM6 gehabt zu haben.
<img src="%PORTD7" name="pd7" onClick="send('H');"></img>
Mein IE WM6.1 generiert so keine onClick-Events. Verwende ein anderes Tag. z.B. <a ... onclick="..."> <img /></a>.
Testen mit onclick="alert('test');". <Ach ja, und schau dir die Def. des Image-Tag nochmal genau an />


Hoffe es hilft dir...
Nach oben

frecherluemmel
Beiträge: 14
Registriert: 13.01.2009, 14:03:04

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von frecherluemmel » 07.01.2010, 07:08:35

Hallo Thomas,

vielen Dank für deine Antwort.

Der Tip mit dem TCP-Sniffer habe ich mal ausprobiert...

Hier die POST-Anfrage vom PC aus;

POST /digital.htm HTTP/1.1
Host: 192.168.1.100
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://192.168.1.100/digital.htm
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

OUT=H&SUB=x

... und hier die z.B. vom Android-Handy aus;

POST /digital.htm HTTP/1.1
Host: 192.168.1.100
Accept-Encoding: gzip
Referer: http://192.168.1.100/digital.htm
Accept-Language: de-DE, en-US
User-Agent: Mozilla/5.0 (Linux; U; Android 2.0; de-de; Milestone Build/SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
Origin: http://192.168.1.100
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/x-www-form-urlencoded
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Content-Length: 11

OUT=H&SUB=x

wie Du sehen kannst, sind die POST Aussendung sowohl auf dem PC als auch auf dem
Handy fast identisch. Der entscheidene String " OUT=H&SUB=x" funktioniert ja.

Aber denoch reagiert der Webserver nur auf die POST-Anfrage des PC-Browsers!! Merkwürdig!

D.h. die POST-Anfrage geht bei beiden raus -> folglich funktioniert ja das onClick-Ereignis!

Achso, den </img> tag habe ich mal gelöscht, hat der blöde Editor selbst eingefügt.

mir bleibt jetzt nur noch am Webserver zu debuggen, was ohne jtag bischen umständlich ist...

mal sehen ob ich den Fehler noch finde... trotzden vielen Dank...
Nach oben

frecherluemmel
Beiträge: 14
Registriert: 13.01.2009, 14:03:04

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von frecherluemmel » 08.01.2010, 20:36:05

Hallo Gemeinde,

ich habe nun heute mal den ganzen Tag lang mal den Webserver mittels HTTP_DEBUG
mit diversen PC- sowie Handy-Browsern "gebuggt"...

Fazit:

Die verschieden Browser behandeln die Authentifizierung und die OnClick-Anweisung ein wenig anders...

Einige Bowser schicken die Anforderung der Seite erstmal ohne Authenifizierung los,
der Webserver reagiert erstmal nicht und sendet ohne! richtiger Authentifizierung die
angeforderderte Datei...

Dann wird sie abgebrochen und eine neue Anforderung wird geschickt...
Jetzt weist der Client, ah Username und Passwort muss geschickt werden...
Eine neue Anforderung wird geschickt... aber
Jetzt akzeptiert der Webserver das Passwort , aber es wird der entscheidene String
"OUT=x" etc. verschluckt... (Retransmisson/-flag?)

Soll heissen, egal was der Client schickt, ist man einmal am Anfang richtig eingeloggt,
wird jede weitere Seiten-Anforderung danach offensichtlich nicht richtig verarbeitet.

Das liegt aber nicht alleine am Webserver-Progi sondern auch an den unterschiedlichen
Browsern und derren Cache!

Also wenn alles der Reihe nach eingeht, also Angeforterte Seite + richtiger Authenifizierung
dann wird alles einwandfrei abgearbeitet.
Kommt es jedoch zu anderen Reichenfolgen wie erst Seite anfordern und dann Authenifizieren
dann klemmt es...
Nach oben

shortie
Beiträge: 62
Registriert: 08.03.2009, 13:00:39

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von shortie » 08.01.2010, 21:26:33

Du hast die dritte Möglichkeit außer acht gelassen. Viele Mobilfunkprovider leiten HTTP-Traffic durch Proxyserver und das gibt teilweise auch noch Probleme. Es gibt eine Community in Deutschland bei der das Problem öfters auftritt sobald sich Community-User mit UMTS-Surfsticks anmelden.
Nach oben

frecherluemmel
Beiträge: 14
Registriert: 13.01.2009, 14:03:04

Re: POST Methode bei Handy-Browser **GELÖST**

  • Zitieren

Beitrag von frecherluemmel » 09.01.2010, 09:34:10

Hallo Gemeinde,

hab das POST und Authenifizierungs-Problem gelöst!

Der Fehler lag wie immer an einem kleinem Flag im Webserver-Code und in der
Reihenfolge der Abarbeitung.

Habe die httpd.c & httpd.h etwas abgeändert, und siehe da jetzt geht es mit jedem
Browser sowohl auf dem PC als auch auf diversen Handys.

Auch spielt nun die Reihenfolge der Anforderung / Authentifiezierung keine Rolle mehr.
Nach oben

Thomas
Beiträge: 655
Registriert: 01.03.2004, 00:41:10

Re: POST Methode bei Handy-Browser **GELÖST**

  • Zitieren

Beitrag von Thomas » 09.01.2010, 14:39:51

Prima! Bitte das Problem näher beschreiben und die Korrektur hochladen, danke!
Nach oben

frecherluemmel
Beiträge: 14
Registriert: 13.01.2009, 14:03:04

Re: POST Methode bei Handy-Browser **GELÖST**

  • Zitieren

Beitrag von frecherluemmel » 09.01.2010, 17:53:17

Hallo Gemeinde, hallo Thomas,

Zusammenfassung
------------------------

Wo lag das Problem:

Ich hatte Probleme mit meiner Webseite, mit den grafischen Schaltern, die sich auf der SD-Karte des Webservers befindet. Sie wurde unter allen PC-Browsern und Betriebssystemen immer
richtig dargestellt und die POST-Anforderungen mit den grafischen Schaltern auch korrekt aus-
geführt.

Rufe ich dagegen die selbe Seite mittels eines Handy-Browsers aus, passierte ausser das die
Seite richtig dargestellt wurde, keine POST-Anforderung, obwohl die POST-Anforderung richtig
ausgesendet wurde.

Ich habe daraufhin erstmal danks Thomas Tip, erstmal die POST-Aussendung der diversen
Browser mittels TCP-Sniffer kontrolliert.

Alle Browser sowohl auf dem PC als auch auf dem Handy schickten die POST-Anfrage offendsichlich korrekt raus. Der entscheidene String "OUT=x&SUB0=x" war immer zu sehen.

Aber der Webserver reagierte immer nur auf die PC-Browser, bei Handy-Browser passierte
nix! Komisch! War schon am verzweifeln!

Also habe ich dann magels JTAG den Webserver mittels einiger zusätzlicher HTTDP_DEBUG
-Befehle über die Serielle Schnittstelle beobachtet...

Hierbei konnte ich folgendes feststellen:

Es lagen grundsätzlich 2 Probleme vor.

1.) Die Reihenfolge der Authenifizierung
- Der Browser schickt seine POST-Anforderung am Anfang ohne Authentifizierung,
- Der Browser schickt seine POST-Anforderung gleich mit korrekter Authentifizierung

2.) Die Position des korrekten Authentifizierungs-Strings innerhalb des Headers.

Zu 1a) Der Der Browser schickt seine POST-Anforderung am Anfang ohne Authentifizierung

Der Webserver erkennt die POST-Anforderung, erkennt keine! Authenifizierung,
findet die Datei auf der SD-Karte und schickt sie raus, erkennt dann erst das die
Authenifizierung nicht stattgefunden hat und fordert die Authentifizierng an.
Es kommt zum Daten/Befehls-Mischmasch. Der Browser schickt die geforderte
Authentifizierung, dann die POST-anforderung erneut, aber der entscheidene
String "OUT=x&SUB=x" geht verloren!

Zu 1b) Der Browser schickt seine POST-Anforderung gleich mit korrekter Authentifizierung

Der Webserver erkennt die POST-Anforderung, erkennt auch sofort die korrekte
Authentifizierung, findet die Datei auf der SD-Karte ,und schickt sie nachdem sie die
Schaltanweisungen korrekt ausgeührt hat, raus.

Zu 2) Die Position des korrekten Authentifizierungs-Strings innerhalb des Headers

Jede Browser Familie schickt seine POST-Anfragen unterschiedlich aus!
Die eine Browser-Familie schickt die Authenifizierung ziemlich am Ende des Headers
und dannach folgt nur wenige weitere Header-Angaben..

und bei anderen Browsern (Handys) befindet sich die Authenifizierung ziemlich
am Anfang des Headers und dannach kommt noch jedemenge Rest-Header!

Auch hier reagierte der Webserver unterschiedlich.

Wenn sich die Postion des Authentifizierungs-Strings ziemlich am Ende mit wenig Rest Header-Daten befindetet, dann funktioniert die "OUT/SUB"-Erkennung!

Steht aber der Authentifizierungs-String ziemlich am Anfang und es folgen noch jedemenge
Rest Header Angaben, dann funktionierte die "OUT/SUB"-Erkennung nicht!!

Fortsetzung folgt...
Nach oben

frecherluemmel
Beiträge: 14
Registriert: 13.01.2009, 14:03:04

Re: POST Methode bei Handy-Browser **GELÖST**

  • Zitieren

Beitrag von frecherluemmel » 09.01.2010, 18:53:41

Fortsetzung:

Und das sind die beiden "Übeltäter";

Zu einem das schon bekannte POST-Flag: http_entry[index].post =

und die Position der if-Abfrage:

if((!http_entry[index].http_auth) && tcp_entry[index].status&PSH_FLAG)
{...
return;
...}

Zum letzteren:

Die If-Routine soll beim nicht erkennen des korrketen Passwort im Header, den Clienten
dies Mitteilen und eine Authentifizierungs-Anforderung an den Clienten schicken.

Da diese If-Abfrage aber so ziemlich am Ende der Routine
void httpd_header_check () steht, werden alle vorherigen If-Abfragen
abgefragt und abgearbeitet und so kommt es bei POST-Anfragen ohne Authenifizierung
erst zu verspäteter Authentifizierungs-Aufforderung und zu Daten/Befehls-Mischmach

Abhilfe: Diese If-Abfrage gleich hinter der Authenifizierungs-Erkennungs-Abfrage-Routine

//finden der Authorization und das Ende im Header auch über mehrere Pakete hinweg!!
if(*http_entry[index].hdr_end_pointer != 0)
{...

...} packen.

Sollte jetzt eine POST-Anfrage ohne Authenifizierung eintreffen, dann wird sofort die
Auhentifizierungs-Auforderung an den Clienten geschickt und die anderen IF-Abffragen
mittels return; die Routine void header_check() übersprungen.

Das bekannte Flag http_entry[index].post =x war ja auch schon das "Problem" wenn
man Dateien von der SD-Karte nach einer POST-Anrfrage lesen wollte.

Dieses Flag dient ja innerhalb der httpd.c bei mehreren if-Abfragen eine wichtige Rolle!

Ich hatte auch den Fehler gemacht, und dieses Flag in der Erkennung der Submit-Abfrage
auszukommentieren, damit das mit der 6ten Stelle im File-Namen und somit die Datei-
Findung bei POST-Anforderungen auf der SD-Karte funktionierte.

Folge war aber, das dann die Datei auf der SD-Karte nach einer POST-Anfrage gefunden wurde, aber jetzt kommst, es wurde auch die weitere "OUT=x&SUB=x"-Erkennung deaktiviert sobald die Datei auf der SD-Karte gefunden wurde... D.h. wenn jetzt die Authentifizierung
am Anfang des Headers steht und zusätzlich die Datei-Erkennung schneller war als die
ankommenden Rest-Daten OUT=x&SUBx dann wurde die entsprechende Erkennung der
restlichen Header-Daten einschliesslich der nachfolgenden OUT=X... Erkennung deaktiviert!

Abhilfe:

Da das wichtige POST-Flag mehrfach in der httpd_header_check() benutzt wird, habe ich
für die Erkennung der 6ten Stelle zur File-Namen Erkennung ein zusätzliches Flag in der

struct http_table
{
...
unsigned char postext : 1 ;
...
}

in der httpd.h eingefügt.

Dieses wird dann im der void httpd_stack_clear (unsigned char index) Routine eingefügt
und initzialisiert.

//HTTPD_STACK löschen
void httpd_stack_clear (unsigned char index)
{
...
http_entry[index].postext = 0;
...
}

Das Flag in der entspechenden POST-Erkennung zusätzlich gesetzt

if(strcasestr_P((char*)&eth_buffer[TCP_DATA_START_VAR],PSTR("POST"))!=0)
{
http_entry[index].post = 1;
http_entry[index].postext = 1;
}

Dann wird die Auskommentierung in der Submit-Erkennung zurückgenommen.

if(*http_entry[index].post_ready_ptr == 0)
{
....
http_entry[index].post = 0;
...
}

zuletzt wird die Erkennung der 6ten Stelle bei der POST-Anfrage entsprechend modefiziert

// Dateinamen ab 6. Stelle extrahieren (am Anfang steht "GET /")
// falls POST gesendet wurde eins dazuzählen (ist ein Zeichen länger)
char *_ptmp = &eth_buffer[TCP_DATA_START_VAR + 5 + http_entry[index].postext];
-----------

Fazit: Die Erkennung der 6ten Stelle für den Datei-Namen geschiet unabhängig, und
die OUT=X&SUB=x Erkennung wird solange ausgeführt, bis eine Submit-Erkennung
im Header stattfindet.

poar war das ne lange erklährung... hoffe es hat geholfen... jedenfalls funktioniert es jetzt
Nach oben

barneyz
Beiträge: 37
Registriert: 02.05.2009, 13:30:40

Re: POST Methode bei Handy-Browser **GELÖST**

  • Zitieren

Beitrag von barneyz » 06.09.2010, 20:34:12

@frecherluemmel, könntest Du bitte noch Deine modifizierte Quelle posten?

edit:
Zu einem das schon bekannte POST-Flag: http_entry[index].post =
Das bekannte Flag http_entry[index].post =x war ja auch schon das "Problem" wenn
man Dateien von der SD-Karte nach einer POST-Anrfrage lesen wollte.
Ist das nur ein Problem durch Deine Änderung oder ist der Fehler generell vorhanden, wenn Dateien von SD gelesen werden?


Vielen Dank im voraus.
Nach oben

fabi88
Beiträge: 11
Registriert: 17.01.2012, 23:54:51
Wohnort: Ilmenau
Kontaktdaten:
Kontaktdaten von fabi88
ICQ

Re: POST Methode bei Handy-Browser **GELÖST**

  • Zitieren

Beitrag von fabi88 » 27.01.2012, 18:27:36

Ich habe den ersten Fehler behoben. Allerdings dauert es auf dem Handy immernoch relativ lange, bis der Webserver reagiert. Im Browser am PC geht das quasi sofort.
Der zweite Fehler besteht nur bei SD-Karten. Habe ich das richtig verstanden?

Hat sonst noch jemand Erfahrung mit dieser Problematik gemacht?

Grüße
Nach oben

fabi88
Beiträge: 11
Registriert: 17.01.2012, 23:54:51
Wohnort: Ilmenau
Kontaktdaten:
Kontaktdaten von fabi88
ICQ

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von fabi88 » 19.02.2012, 21:47:47

Hallo,
Kann vielleicht ein Admin mal das *gelöst* aus der Überschrift entfernen? Offenbar besteht auch bei anderen noch das Problem.

Beim iPhone scheint alles ohne Problme zu laufen. Bei Android (in meinem Fall HTC Desire mit verschiedenen Browsern) nur mit Verzögerung von mehreren Minuten.

Grüße
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Nach oben

barneyz
Beiträge: 37
Registriert: 02.05.2009, 13:30:40

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von barneyz » 22.02.2012, 19:01:39

Ich habe mit Samsung Galaxy S2 und Opera Mini sowie Opera Mobile keine Probleme.

Webseiten über SD-Karte.....
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Nach oben

gmenke
Beiträge: 1
Registriert: 10.02.2012, 22:10:34

Re: POST Methode bei Handy-Browser

  • Zitieren

Beitrag von gmenke » 11.03.2012, 09:37:27

Hallo,

ich kann das von fabi88 oben beschriebene Verhalten bestätigen: Nachdem der erste Fehler korrigiert ist, funktioniert es zwar, allerdings dauert es sehr lange, bis das erneute Laden der Seite nach Abschicken der Daten abgeschlossen ist. (Ich verwende keine SD-Karte.)

Jedoch beobachte ich dieses Verhalten auf dem Galaxy S2 (Android 2.3.4) nur mit dem Android-eigenen Browser und dem "Dolphin HD". Mit dem Opera funktioniert es tatsächlich einwandfrei!

Gruß,
G. Menke
Nach oben

Antworten
  • Druckansicht

15 Beiträge • Seite 1 von 1

Zurück zu „AVR-Webmodule“



  • Foren-Übersicht
  • Alle Zeiten sind UTC+02:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum