有没有一种方法可以使用python轮询功能提取http响应

时间:2019-10-29 00:11:35

标签: python http publish-subscribe polling

我正在使用以下代码轮询发布/订阅服务器

    import requests
    polling2.poll(lambda: requests.get('http://google.com').status_code == 200,
    step=60,
    poll_forever=True)

如果返回true,是否有一种方法可以访问响应主体以获取特定字段?在我的情况下,它正在返回json响应

1 个答案:

答案 0 :(得分:0)

您可以将poll()的结果赋给变量,它将具有lambda返回的值

result = polling2.poll(lambda: requests.get('http://google.com').status_code == 200, 
                       step=60, 
                       poll_forever=True)

但是在当前代码中,lambda返回True,并且result将是True,并且将无法访问requests

但是您可以使用check_success=以不同的方式编写它来测试状态

import requests
import polling

def test(response):
    return response.status_code == 200

result = polling.poll(lambda: requests.get('http://google.com'), 
                      step=60, 
                      poll_forever=True, 
                      check_success=test)

print(result.text)

现在lambda返回responsepoll将此response发送到函数test,该函数检查status_code。如果test将返回True,则它将response配给result,您可以使用.text.content.json() < / p>


我在polling.py的源代码中找到了它


编辑:它显示了如何使用collect_value=。但是queue获取除result中的最后一个值以外的所有值。因此,它为状态不同于200的响应(或错误消息,如果它们引发错误)收集结果。

import requests
import polling
import queue

def test(response):
    return response.status_code == 200

my_queue = queue.Queue()

result = polling.poll(lambda: requests.get('http://google.com'), 
                      step=60, 
                      poll_forever=True, 
                      check_success=test,
                      collect_value=my_queue)

if my_queue.empty():
    print('empty')
else:
    while not my_queue.empty():
        print(my_queue.get())

#print(result.text)
相关问题