【问题标题】:How can I listen to new POST methods by server?如何通过服务器收听新的 POST 方法?
【发布时间】:2019-03-25 02:08:39
【问题描述】:

我正在编写一些应用程序。我正在使用带有标准请求框架的 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 请求并在新的 POST 消息上请求 GET 方法?

【问题讨论】:

  • “监听来自服务器的新 POST 请求”是服务器所做的,在客户端没有办法做到这一点。如果要枚举现有资源,请实现服务器端 API 以列出它们。
  • 简短的回答是你不能。如果你控制服务器,你有很多选择:你可以提供一个端点来返回可用资源列表(你可以轮询),或者向你广播/推送新数据(这需要你运行一个服务器来接收它),但没有什么神奇的方法可以知道服务器已收到请求。
  • @JimStewart 如果我通过发送新请求不断等待新的 POST 直到我得到 200 而不是 404 怎么办?

标签: python python-2.7 python-requests


【解决方案1】:

您可以使用以下方式轮询新数据:

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 是连续的,并且一旦您看到一个,就想寻找下一个。

【讨论】:

    【解决方案2】:

    你可以使用 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()
    

    【讨论】:

    • 这是我相信的服务器
    • @Edmund 当您说服务器时,您是指发送信息的项目吗?我使用此代码设置了一个程序,该程序将等待网站发送的消息然后使用该信息。这就是你要找的吗?
    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 2023-04-06
    • 1970-01-01
    • 2021-08-26
    • 2016-08-03
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多