在python中获取POST请求的连续响应

时间:2016-05-02 09:16:20

标签: python python-2.7 curl request python-requests

我正在编写一个脚本,它向服务器发出POST请求并被阻止,服务器会在触发特定事件时继续发送响应。我必须使用早期登录请求为发布请求提取cookie并将其作为数据传递给POST,每个cookie持续10分钟,之后我将运行保持活动请求。

每当触发某个事件时,我想将该事件记录在一个文件中,我尝试异步,请求他们生成发布请求,但我不能控制输出,我也尝试了会话但没有用。我想以相同的顺序执行以下操作

1]登录(只能进行一次)

2]将请求发布到服务器

3]只要有一些输出将其记录到文件中,就会永远监视步骤2的输出

4]通过对服务器的另一个请求使会话保持活动状态。

如果您需要更多解释,请告诉我。

下面是代码,但它不起作用

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()

所以在上面的代码中,我在这里进行的后调用是阻塞和连续的,它连续地输出输出,所以后调用永远不会真正完成。 但它以xml格式接收输出,服务器每次触发事件时都会发送这些响应。

PS:我不想再注销并重新登录,这在curl中工作,它在stdout上保持打印输出,我必须为200个这样的服务器运行此代码。

1 个答案:

答案 0 :(得分:0)

我用两级线程和读取块而不是内容或read_lines()修复了这个问题。 1]将创建第一个线程,它将产生第二个线程并在超时命中时运行keepalive。

2]第二个线程使用POST请求订阅事件,然后每次收到响应时继续监听大小为1024的块,并解析它并更新相应的数据。这里我用Stream = True的请求;这对我来说不起作用,因为cookie在读取响应和会话之前已经过期了。

如果有人有更好的方法,请在此处更新。