Seite 1 von 1
Keep-alive receive
Verfasst: Freitag 11. Oktober 2013, 20:19
von Lechim
Hallo Pythana
Ich habe ein Loginscript erstellt, mit dem ich Nachrichten empfangen möchte.
Ich weiss leider nur nicht, wie man Keep-Alive dauerhaft (schleife?) received.
Momentan bekomme ich "natürlich" überhaupt keine Ausgabe.
Hier mal ein Codeschnipsel hoffe das reicht.
Code: Alles auswählen
headers = {'Connection': 'keep-alive'}
response, content = http.request('http://www.google.de', 'GET', headers=headers)
Re: Keep-alive receive
Verfasst: Freitag 11. Oktober 2013, 20:52
von BlackJack
Ich würde statt der hässlichen `urllib`/`urllib2`-API
requests empfehlen. Wenn Du die Anfragen über ein `Session`-Objekt stellst, wird automatisch die selbe Verbindung wiederverwendet wenn das möglich ist.
„keep-alive” ist bei HTTP nichts spezielles was man sendet oder empfängt, sondern es hält eine Verbindung länger offen, so dass man mehr als eine HTTP-Anfrage und -Antwort nacheinander über die selbe Verbindung abwickeln kann. Du musst halt einfach Deine Anfragen stellen. Zu lange dürfen die nicht auseinander liegen, denn nach einer gewissen Zeit, zum Beispiel 5 Sekunden, schliesst der Server die Verbindung wenn keine Anfrage kommt.
Re: Keep-alive receive
Verfasst: Samstag 12. Oktober 2013, 03:33
von Dami123
Ich glaub die meisten Seiten loggen dich nach gewissen Zeit automatisch aus.
Deswegen solltest du dein Programm einfach so umbauen, dass du erst eingeloggt wirst, jede x sec/min neue Nachrichten gecheckt werden
und bei der "not logged in" exception, einfach wieder neu einloggen und weiter Nachrichten empfangen.
Ggf. bietet die Seite eine Checkbox an, welche dir über Cookies einen längeren eingeloggten Zustand ermöglicht.
Re: Keep-alive receive
Verfasst: Samstag 12. Oktober 2013, 12:09
von Lechim
Danke erstmal

aber...
BlackJack hat geschrieben:Du musst halt einfach Deine Anfragen stellen. Zu lange dürfen die nicht auseinander liegen, denn nach einer gewissen Zeit, zum Beispiel 5 Sekunden, schliesst der Server die Verbindung wenn keine Anfrage kommt.
In diesem Fall wird der Server die Verbindung nicht kappen, dieser ist scheinbar so konfiguriert.
Ich sehe ja mit Wireshark das ich alle paar Sekunden Daten receive. - (Bis ich das Terminal schliesse.)
Es geht halt tatsächlich nur um die reine Ausgabe des
content.
Re: Keep-alive receive
Verfasst: Samstag 12. Oktober 2013, 12:17
von BlackJack
@Lechim: Dann ist das aber etwas völlig anderes als der ``Content: keep-alive``-Header. In Deinem Fall lässt sich der Server Zeit mit dem ausliefern der Antwort und liefert die Häppchenweise, möglicherweise unendlich.
Mein Vorschlag bleibt immer noch auf `requests` zu setzen, und in diesem Fall solltest Du Dir in der Dokumentation mal
Streaming Requests anschauen.
Re: Keep-alive receive
Verfasst: Sonntag 13. Oktober 2013, 16:20
von Lechim
Klappt wirklich ganz gut mit dem requests Modul.
Danke für den Tipp.
Da in meinem Fall wirklich nur kleine Portiönchen ankommen, war
chunk_size noch wichtig.
k = requests.get(url, headers=headers, stream=True)
for line in k.iter_lines(chunk_size=1):