PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HTTP Zugriff



BuckWheat
04.06.2009, 15:12
Hey !

Ich programmiere gerade einen atMega128. An dem Controller ist ein GSM-Modem angeschlossen.

Ich will auf eine Webseite über GPRS zugreifen um dort ein php-Skript zu öffnen.

Das funktioniert auch alles soweit gut.

Jetzt will ich aber die Verbindung zum Webserver aufrecht erhalten. Standartmäßig lösen die Webserver nach dem Zugriff die Verbindung.

Mein Zugriff im Moment sieht folgendermaßen aus:
//Socket öffen etc, dann folgende Anweisung senden

GET /jspkurs/web/script/kap1.html HTTP/1.1
Host: localhost
// Jetzt 2x "\r\n" senden.


Ich habe von einem Paramter "connection" gelesen, der dem Webserver sagt, bleib connectet. Wie sieht dazu der Aufruf auf und muß ich auf der Server Seite noch etwas machen ?

Könnte das so gehen ?
GET /jspkurs/web/script/kap1.html HTTP/1.1
Host: localhost
Connection: keep-alive
// Jetzt 2x "\r\n" senden.


Vielleicht weiß ja jemand etwas ....

Thx
Buck

sato
04.06.2009, 18:59
Hallo

Möchte auch Daten über GPRS zum Webserver senden, weiss nur noch nicht wie das geht. Hast Du Beipeilecode in Bascom der zeigt wie es gemacht wird?

Gruss
Sato

BuckWheat
05.06.2009, 12:45
Hey !

Es gibt sehr viele verschiedne Wege den Zugriff zu programmieren. Deine HW die du benutzt spielt dabei eine große Rolle.

Erkläre doch mal kurz deinen Aufbau.

Buck

Vitis
05.06.2009, 21:42
Daten zum Webserver senden geht am Einfachsten per
GET - Parametern, sprich die zu sendenden Daten werden einfach
in die Kommandozeile geschrieben.
sähe dann so in etwa aus:

http://meinserver.info/meineseite.php?datensatz1=xyz&datensatz2=abcd

Das Script kann die dann schon per $_GET verarbeiten.

vohopri
06.06.2009, 08:16
Hallo Buck,

Connection: keep-alive

ist korrekt.

Http ist übrigens gut dokumentiert und die Dokumentation ist relativ einfach mit einer Suchmaschine zu finden. Beispielsweise hier:

http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html

grüsse,
Hannes

BuckWheat
06.06.2009, 11:47
hallo hannes !

ich werde es einfach mal ausprobieren.

aber gerade diese funktion ist kritisch. am anfang des www wurden die verbindungen grundsätzlioch geschlossen. heute ist das anders. in jedem header vom server steht die connect art. eigentlich ist es der server der über die connection bestimmt. das bedeutet, daß man auf der serverseite auch noch etwas ändern müßste.

der befehl connect: keep-alive ist zwar vorhanden, aber nicht wirklich umgesetzt worden. das habe ich halt bei meinen recherchen herausbekommen, die ich definitiv gemacht habe.

mit meinem post wolle ich auf den erfahrungsschatz der nutzer dieses forums zurückgreifen. das ist mein anliegen.

Vitis
06.06.2009, 13:02
ich frag mich wozu es gut sein soll eine connection
auf ewig zu halten.
der server wird das auch nicht mitmachen und der provider
macht u.u. auch noch ne zwangstrennung wie beim dsl nach
x stunden.
du hast doch alles ... n gsm modem um die verbindung herzustellen
und dann per request die get daten rüber schicken.
ich kenns zwar nur andersrum, sprich der server löst cronjob aus
und greift auf den lokalen webserver zu um daten zu pollen, ist
aber da einwahlverbindung, besser sorum.
Vorteil wär halt auch, du könntest die verbindung nach datenübermittlung
trennen ... läuft dann nicht so ins geld.
um was für daten dreht es sich denn überhaupt?

vohopri
06.06.2009, 13:36
Hallo buck,

du hast natürlich nicht die Garantie, dass ein Server, den du nicht selbst betreibst, ein keep alive beherrscht. Darum sollte man nichts davon abhängig machen, und nötigenfalls auf connection close Betrieb zurückgehen können.

Wenns der server beherrscht, kann der Client connection close oder connection keepalive anfordern. In HTTP schaun dann die beiden Varianten folgendermassen aus (http header und socket Ereignisse im Protokoll):


lookup
connecting
connect to 74.125.43.99 bw-in-f99.google.com
write
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language: de-at
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: www.google.at
Connection: Keep-Alive

read
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Date: Sat, 06 Jun 2009 12:19:46 GMT
Expires: -1
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=adff0003981ad673:TM=1244290786:LM=12442907 86:S=-troxoMuBvG5j02J; expires=Mon, 06-Jun-2011 12:19:46 GMT; path=/; domain=.google.at
Content-Encoding: gzip
Server: gws
Content-Length: 3694

‹

Verbindung bleibt bestehen.
Client beendet.

disconnect 74.125.43.99 bw-in-f99.google.com

lookup
connecting
connect to 74.125.43.147 bw-in-f147.google.com
write
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language: de-at
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: www.google.at
Connection: Close

read
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Date: Sat, 06 Jun 2009 12:24:35 GMT
Expires: -1
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=d047bb5ad1568677:TM=1244291075:LM=12442910 75:S=iIVLqQ8TszFRQZCI; expires=Mon, 06-Jun-2011 12:24:35 GMT; path=/; domain=.google.at
Content-Encoding: gzip
Server: gws
Content-Length: 3697
Connection: close

‹
disconnect 74.125.43.147 bw-in-f147.google.com

Server hat beendet.


grüsse,
Hannes

vohopri
06.06.2009, 13:48
Hallo vitis,

von ewig ist ja auch nicht die rede. Natürlich gibts ein timeout von serverseite. In der HTTP Dokumentation siehst du auch, wie das über die Header kommuniziert werden kann. Unter bestimmten Voraussetzungen spart ein keep alive clientseitig und serverseitig ressourcen, dafür ist es auch vorgesehen und das kann man nutzen.

grüsse,
Hannes

BuckWheat
25.06.2009, 10:43
Hey Vitis !

Es geht bei mir darum viele Datensätze zu versenden. Im Moment öffne ich immer wieder einen Socket und sende die Daten. Das Öffnen des Sockets dauert nur immer einige Sekunden und ist auch nicht unkritisch (Abbrüche).

Um dieses zu vermeiden würde ich die Verbindung offen halten und die Zugriffe (GET) auf den Server innerhalb einer Verbindung machen.

Ich habe jetzt eine andere Lösung gefunden. Ein Protokoll in dem ich viele Daten in ein PHP Skript unterbringe.

Buck

thewulf00
30.06.2009, 07:53
Dann stelle die Lösung doch bitte hier mal vor. Das nützt sicher einigen von uns.