簡體   English   中英

flask無法從郵遞員或網頁獲取帖子數據,但可以在python請求中使用

[英]flask can't get post data from postman or web page,but work in python request

我使用flask作為API服務器。 我用python測試就可以了!

class ModelLoader(MethodView):
    def __init__(self):
        pass

    def post(self):
        content = request.get_json()
        request
        X_input = content['X_input']
        X_in = str(X_input)
        pred_val,posib = predictor.predict(X_input=X_in)
        pred_val = pred_val.tolist()
        posib = str(round(posib,4)*100)
        #posib = posib.tolist()
        return jsonify({'pred_val': pred_val,'confident':posib})

    def initialize_models(json_path, weights_path, normalized_x, normalized_y):
        global predictor
        predictor = Predictor(json_path, weights_path, normalized_x, normalized_y)
        predictor.compile_model(loss='categorical_crossentropy', optimizer='adam')


    def run(host='0.0.0.0', port=19865):
        """Run a WSGI server using gevent."""
        app.add_url_rule('/predict', 
        view_func=ModelLoader.as_view('predict'))
        print('running server http://{0}'.format(host + ':' + str(port)))
        WSGIServer((host, port), app).serve_forever()

測試代碼

import requests
def get_predictions(X_input):
    """Get predictions from a rest backend for your input."""
    print("Requesting prediction for XOR with {0}".format(X_input))
    r = requests.post("http://yansheng.wang:19865/predict", json={'input':  X_input})
print(r.status_code, r.reason)
resp = r.json()
prediction = resp['pred_val']
confident = resp['confident']
print("XOR of input: {0} is {1},on confident of {2} ".format(X_input, prediction,confident))

if __name__ == '__main__':

    X_inputs = ["885863343916543724"]

    for x_input in X_inputs:
        get_predictions(x_input)

當我運行它時,我無法從郵遞員或網頁上獲取帖子數據!

服務器控制台輸出差異如下所示,這是怎么回事?:

45.76.182.34 - - [2017-07-29 12:11:55] "POST /predict HTTP/1.1" 200 162 0.044396
45.76.182.34 - - [2017-07-29 12:12:03] "POST /predict?input=3423432432424233 HTTP/1.1" 400 303 0.001046

當使用測試代碼測試代碼時,您將在json主體中傳遞X_input值。

# part of request
json={'input':  X_input}

# I would suggest make the key consistent

# inside post menthod
content = request.get_json()
request
X_input = content['X_input']
X_in = str(X_input)

但是,當您從Web /郵遞員發送它時,您是以url參數發送它。

"POST /predict?input=3423432432424233 HTTP/1.1" 400

因此,它失敗了。 從郵遞員在json正文中發送此數據。 它應該工作。

例:

JSON正文的郵遞員郵遞示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM