Holen Sie sich kontinuierliche Antwort von POST-Anfrage in Python

Ich schreibe ein Skript, das eine POST-Anforderung an einen Server macht und blockiert wird, der Server sendet die Antwort immer dann, wenn ein bestimmtes Ereignis ausgelöst wird. Ich muss ein Cookie für Post-Anfrage mit früheren Login-Anforderung und übergeben Sie es als Daten an POST, jeder Cookie dauert für 10 Minuten nach dem ich habe, um Keep-Alive-Anfrage zu führen.

Wann immer ein Ereignis ausgelöst wird, möchte ich dieses Ereignis in einer Datei protokollieren, ich habe async versucht, unirest Anfragen, die sie die Post-Anfrage generieren, aber ich habe keine Kontrolle über die Ausgabe, ich habe auch Sessions ausgesucht. Ich möchte folgende Dinge in derselben Reihenfolge machen

1] Login (nur einmal möglich)

2] Die Anfrage an den Server senden

3] Halten Sie die Monitoring-Ausgabe von Schritt 2 ewig, wenn es einige Ausgabe Log in eine Datei

4] Halten Sie die Sitzung lebendig durch eine andere Anforderung an den Server.

Lassen Sie mich wissen, wenn Sie mehr Erklärung benötigen.

Unten ist Code, es funktioniert aber nicht

while True: try: xmldata = "<eventSubscribe cookie=\"%s\" />" % (self.cookie) r = requests.post(post_url,data=xmldata,stream=False,verify=False,timeout=10) write_to_file('Ok',r.text) unsubevents() logout() except Exception as e: print e self.write_to_file('Ok',"") self.login() 

Also in oben Code der Post-Aufruf Ich mache hier ist Blockierung und kontinuierlich, Es strömt die Ausgabe kontinuierlich so dass die Post-Call nie wirklich abgeschlossen wird. Aber es erhält Ausgabe im XML-Format, Server sendet diese Antworten jedes Mal, wenn ein Ereignis ausgelöst wird.

PS: Ich möchte nicht abmelden und wieder anmelden, das funktioniert in Curl, wo es hält Druckausgabe auf stdout, ich muss diesen Code für mehrere Server wie 200 laufen.

One Solution collect form web for “Holen Sie sich kontinuierliche Antwort von POST-Anfrage in Python”

Ich habe dieses Problem mit zwei Ebenen-Threading und Lese-Chunks anstelle von content oder read_lines () behoben. 1] Erste Threads werden erstellt, die den zweiten Thread hervorbringen und Keepalive laufen lassen, wenn Timeout-Treffer auftritt.

2] Zweites Thread zeichnet das Ereignis mit POST-Anforderung ab und hört dann immer auf Chunks der Größe 1024 zu, jedes Mal, wenn eine Antwort empfangen wird, wird es analysiert und entsprechende Daten werden aktualisiert. Hier habe ich Anfragen mit Stream = True; Dies funktionierte nicht für mich früher, weil Cookie verwendet, um zu lesen, bevor Lesen Antwort und Sitzung verwendet, um zu schließen.

Wenn jemand einen besseren Weg hat, dies zu tun, bitte hier aktualisieren

Python ist die beste Programmiersprache der Welt.