Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中获取POST请求的连续响应_Python_Python 2.7_Curl_Request_Python Requests - Fatal编程技术网

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

在python中获取POST请求的连续响应,python,python-2.7,curl,request,python-requests,Python,Python 2.7,Curl,Request,Python Requests,我正在编写一个脚本,它向服务器发出POST请求并被阻止。每当触发特定事件时,服务器都会不断发送响应。我必须为post请求和之前的登录请求获取一个cookie,并将其作为数据传递给post,每个cookie持续10分钟,之后我必须运行keep alive请求 每当触发某个事件时,我想将该事件记录到一个文件中,我尝试了异步的unirest请求,它们生成post请求,但我无法控制输出,我也尝试了会话,但没有任何用处。我想按同样的顺序做以下事情 1] 登录(只能登录一次) 2] 将请求发布到服务器 3]

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

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

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()
为True时:
尝试:
xmldata=”“%(self.cookie)
r=requests.post(post_url,data=xmldata,stream=False,verify=False,timeout=10)
将_写入_文件('Ok',r.text)
不允许
注销()
例外情况除外,如e:
打印e
self.write_到_文件('Ok',“”)
self.login()
因此,在上面的代码中,我在这里进行的post调用是阻塞的和连续的,它不断地流化输出,所以post调用永远不会真正完成。 但它接收xml格式的输出,服务器在每次触发事件时发送这些响应


PS:我不想注销并再次登录,这在curl中有效,它会在stdout上不断打印输出,我必须为几个服务器(如200台)运行此代码。

我已通过两级线程和读取块而不是内容或读取行()修复了此问题。 1] 将创建第一个线程,该线程将生成第二个线程,并在超时到达时运行keepalive

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


如果有人有更好的方法,请在这里更新。

我不明白你到底想要什么。请把问题弄清楚,以便更快地获得帮助。如果您设置
stream=True
并使用,会怎么样?是的,我也尝试过,但没有成功。发生的情况是,它将保持会话10分钟,然后抛出错误。我们可以让会议继续下去。我还尝试了keep_alive会话,但没有给出任何输出