Ich schreibe ein Skript, das eine POST-Anfrage an einen Server und blockiert wird der Server sendet die Antwort immer dann, wenn ein bestimmtes Ereignis ausgelöst wird. Ich muss ein Cookie für eine Post-Anfrage mit einer früheren Login-Anfrage nehmen und es als Daten an POST übergeben, jeder Cookie dauert 10 Minuten, nach dem ich eine Keep-Alive-Anfrage ausführen muss.Kontinuierliche Antwort der POST-Anfrage in Python
Immer wenn ein Ereignis ausgelöst wird, möchte ich dieses Ereignis in einer Datei protokollieren. Ich habe asynchrone, universelle Anfragen versucht, die Post-Anfrage generieren, aber ich habe keine Kontrolle über die Ausgabe, ich versuchte Sitzungen auch, aber nutzlos. Ich möchte folgende Dinge in derselben Reihenfolge tun
1] Anmeldung (kann nur einmal tun)
2] Stellen Sie die Anfrage an den Server
3] Überwachung Ausgabe von Schritt 2 ewig halten, wenn es etwas ist, Ausgabe log es in eine Datei
4] Halten Sie die Sitzung durch eine andere Anfrage an den Server lebendig.
Lassen Sie mich wissen, wenn Sie weitere Erklärungen benötigen.
Im Folgenden finden Sie Code, es funktioniert nicht, obwohl
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()
So in obigem Code der Post Anruf, den ich hier machen blockiert und kontinuierlich an, die Ausgabe kontinuierlich Ströme, so dass der Post Anruf nie wirklich abgeschlossen wird. Aber es empfängt Ausgabe im XML-Format, Server sendet diese Antworten jedes Mal, wenn ein Ereignis ausgelöst wird.
PS: Ich will nicht, logout tun und wieder anmelden, das funktioniert in curl, wo es Druckausgabe auf stdout hält, muss ich für mehrere Server diesen Code ausführen wie 200.
Ich habe nicht verstanden, was Sie eigentlich wollen. Bitte stellen Sie die Frage klar, um schneller Hilfe zu erhalten. –
Geben Sie einen Code ein. –
Was passiert, wenn Sie 'stream = True 'setzen und [r.iter_lines] (http://docs.python-requests.org/en/master/api/#requests.Response.iter_lines) verwenden? –