【问题标题】:How do you get a response from a Flask app with curl?你如何从带有 curl 的 Flask 应用程序中获得响应?
【发布时间】:2020-04-01 22:51:00
【问题描述】:

我正在使用 AllenNLP 构建一个 Flask 测试预测器。

我将 .json 文件中的“段落”和“问题”传递给预测器。

但是,当我使用 curl 传递 json 文件时,它不会返回响应。 Flask 中是否有特殊返回获取它?

代码如下:

 from allennlp.predictors.predictor import Predictor as AllenNLPPredictor


from flask import Flask
from flask import request
app = Flask(__name__)

@app.route("/", methods=['GET','POST'])
def hello():
    return "<h1>Test app!</h1>"


class PythonPredictor:
    def __init__(self, config):
        self.predictor = AllenNLPPredictor.from_path(
            "https://storage.googleapis.com/allennlp-public-models/bidaf-elmo-model-2018.11.30-charpad.tar.gz"
        )

    def predict(self, payload):
        if request.method == "POST":
            prediction = self.predictor.predict(
                passage=payload["passage"], question=payload["question"]
            )
            return prediction["best_span_str"]

Curl 命令看起来像: curl http://127.0.0.1:5000 -X POST -H "Content-Type: application/json" -d @sample.json

【问题讨论】:

  • 网址看起来不正确。你可以试试http://127.0.0.1:5000/predict
  • 感谢您的收获。这只是我卷曲中的一个错字,因为我正在尝试不同的路线。我现在已经在上面编辑了。如果你现在看路线,一切都在“/”下。

标签: api flask allennlp


【解决方案1】:

除非我误解了(我猜你是问如何在你的路由中获取 JSON 提交,并返回结果)听起来你需要做类似的事情:

p = PythonPredictor()

@app.route("/", methods=['POST'])
def hello():
    data = request.get_json()
    result = p.predict(data)
    return result

这会通过PythonPredictor.predict 方法有效地运行sample.json 中的数据,并将预测返回给客户端。

请注意,此代码在路由函数之外创建实例 p,因此 NLP 模型仅在您的烧瓶应用程序启动时加载(而不是在每个请求上)。但是看起来这可能会重新下载该文件,除非AllenNLPPredictor.from_path 进行了一些缓存,因此建议先手动将该文件下载到您自己的存储中,然后在PythonPredictor.__init__ 函数中从那里加载。

如果有任何需要澄清或我误解了,请告诉我。

【讨论】:

  • 非常感谢@v25。就是这样。我认为总的来说,我在这里缺少您的代码 sn-p 提供的概念。要在 PythonPredictor 初始化中加载模型,您是否有一个链接,我可以研究如何从我自己的服务器(天蓝色托管)加载它?
  • 很好的答案,非常感谢您分享您的观点。对我也有很大帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2018-06-14
  • 2023-03-12
  • 1970-01-01
  • 2016-04-01
相关资源
最近更新 更多