【问题标题】:Get continuous response of POST request in python在python中获取POST请求的连续响应
【发布时间】:2016-05-02 09:16:19
【问题描述】:

我正在编写一个脚本,该脚本向服务器发出 POST 请求并被阻止,只要触发特定事件,服务器就会不断发送响应。我必须为之前登录请求的 post 请求获取一个 cookie,并将其作为数据传递给 POST,每个 cookie 持续 10 分钟,之后我必须运行 keep-alive 请求。

每当触发某个事件时,我想将该事件记录在一个文件中,我尝试了异步、unirest 请求,它们生成了发布请求,但我无法控制输出,我也尝试了会话,但没有用。我想按照相同的顺序做以下事情

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

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

PS:我不想注销并再次登录,这适用于 curl,它会在 stdout 上保持打印输出,我必须为多个服务器(如 200)运行此代码。

【问题讨论】:

  • 我不明白你真正想要什么。请明确问题以便更快地获得帮助。
  • 如果你设置stream=True并使用r.iter_lines呢?
  • 是的,也试过了,没用。发生的情况是,它将保持会话 10 分钟,然后抛出错误。我们可以保持会话活跃。我也试过用 keep_alive 的会话没有给出任何输出

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多