Keep-alive receive

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Lechim
User
Beiträge: 6
Registriert: Montag 7. Oktober 2013, 20:39
Wohnort: Berlin

Hallo Pythana 8)

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)
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.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

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.
Benutzeravatar
Lechim
User
Beiträge: 6
Registriert: Montag 7. Oktober 2013, 20:39
Wohnort: Berlin

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.
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.
Benutzeravatar
Lechim
User
Beiträge: 6
Registriert: Montag 7. Oktober 2013, 20:39
Wohnort: Berlin

Klappt wirklich ganz gut mit dem requests Modul. :idea:
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):
Antworten