我正在编写一些应用程序。我正在将Python 2.7与标准请求框架一起使用。 基本上,该应用程序只是一个简单的客户端,它向某些 www.example.com/goals/1 服务器请求GET方法。首先,我的代码看起来像这样:
import sys
import requests
def talker():
resp = requests.get("http://www.example.com/goals/1")
jdata = resp.json()
print jdata
if __name__ == '__main__':
talker()
它可以正常工作。但是现在我想不断地收听任何新的POST方法,以便可以尽快检索。因此,请考虑在大约x时间内,服务器在 www.example.com/goals/ 2 上上传新的json消息。我必须通过更改url末尾的数字来再次运行代码。我可以运行一个while循环,直到永远不会结束,而只是继续以递增的数量发送请求,直到服务器的响应不会是200而不是404,但我认为这将是一个错误的选择,并且可能会耗尽服务器的资源。>
所以我的问题是,我怎样才能不断地监听服务器发出的新POST请求,并在新的POSTed消息上请求GET方法?
答案 0 :(得分:0)
您可以使用以下方式轮询新数据:
def talker():
resource_id = 1
while True:
resp = requests.get('http://www.example.com/goals/%i' % resource_id)
if resp.ok:
jdata = resp.json()
print jdata
resource_id = resource_id + 1
time.sleep(60)
这只是概念的证明;您可能想要使其更智能。我在其中睡个好觉,因为否则它会向远程服务器发送垃圾邮件(假设您不拥有该服务器)。自行决定应多久检查一次新数据。
这假定资源ID是连续的,并且一旦看到一个,就想寻找下一个。
答案 1 :(得分:0)
您可以使用Flask,这是一个用于在python中制作基本网站的软件包,用于侦听发布请求。这样的代码就可以完成任务。假设要发送的数据是json文件。其他选项也是可能的。
根据您的工作,此代码可能就足够了:
from flask import Flask, request, abort
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
if request.method == 'POST':
print(request.json)
return '', 200
else:
abort(400)
if __name__ == '__main__':
app.run()