我正在使用以下代码轮询发布/订阅服务器
import requests
polling2.poll(lambda: requests.get('http://google.com').status_code == 200,
step=60,
poll_forever=True)
如果返回true,是否有一种方法可以访问响应主体以获取特定字段?在我的情况下,它正在返回json响应
答案 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
返回response
,poll
将此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)