如何通过服务器收听新的POST方法?

时间:2018-10-20 11:05:43

标签: python python-2.7 python-requests

我正在编写一些应用程序。我正在将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方法?

2 个答案:

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