Не удалось выполнить запрос на соединение Flask Keep Alive - PullRequest
2 голосов
/ 18 апреля 2019

Я хочу создать HTTP-соединение Keep-Alive, но мне не удалось.

Я создаю демонстрационное приложение.

from flask import Flask, make_response, Response
from flask import jsonify

try:
    from http.server import BaseHTTPRequestHandler
except: 
    from BaseHTTPServer import BaseHTTPRequestHandler

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    resp = make_response("{'123':'aaa'}")
    return resp

if __name__ == '__main__':
    BaseHTTPRequestHandler.protocol_version = "HTTP/1.1"
    app.run()

Я отправляю несколько запросов:

{"text":-1193959466}
{"text":-1139614796}
{"text":837415749}
{"text":-1220615319}
{"text":-1429538713}
{"text":118249332}
{"text":-951589224}

и я получил ошибку:

127.0.0.1 - - [18/Apr/2019 20:14:15] "POST / HTTP/1.1" 200 -
127.0.0.1 - - [18/Apr/2019 20:14:16] "{"text":-1193959466}POST / HTTP/1.1" 405 -
127.0.0.1 - - [18/Apr/2019 20:14:16] "{"text":-1139614796}POST / HTTP/1.1" 405 -
127.0.0.1 - - [18/Apr/2019 20:14:17] "{"text":837415749}POST / HTTP/1.1" 405 -
127.0.0.1 - - [18/Apr/2019 20:14:17] "{"text":-1220615319}POST / HTTP/1.1" 405 -
127.0.0.1 - - [18/Apr/2019 20:14:18] "{"text":-1429538713}POST / HTTP/1.1" 405 -
127.0.0.1 - - [18/Apr/2019 20:14:19] "{"text":118249332}POST / HTTP/1.1" 405 -
127.0.0.1 - - [18/Apr/2019 20:14:19] "{"text":-951589224}POST / HTTP/1.1" 405 -

для этого журнала первый запрос был успешным, но другие не удалось. Кажется, он не очищает содержимое последнего запроса.

если я удалю этот код:

BaseHTTPRequestHandler.protocol_version = "HTTP/1.1"

все в порядке снова.

Кто-нибудь сталкивался с такой же проблемой? я использовал версию колбы: 1.0.2


обновление: я знаю, что случилось, мне нужно прочитать содержание запроса:

@app.route('/', methods=['POST'])
def hello_world():
    # read the request content
    print(request.json)
    print("\n")
    resp = make_response("{'123':'aaa'}")
    return resp

спасибо всем.

1 Ответ

0 голосов
/ 18 апреля 2019

Вместо использования BaseHTTPRequestHandler вы можете использовать запрос по умолчанию WSGIRequestHandler.

Поскольку WSGIRequestHandler расширяет BaseHTTPRequestHandler , вы можете указать версию протокола HTTP, которую вы хотите использовать. Если для свойства установлено значение HTTP / 1.1 , соединение будет оставаться активным.

from flask import Flask, make_response, Response
from werkzeug.serving import WSGIRequestHandler
from flask import jsonify

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    resp = make_response("{'123':'aaa'}")
    return resp

if __name__ == '__main__':
    WSGIRequestHandler.protocol_version = "HTTP/1.1"
    app.run()

Не забудьте включить from werkzeug.serving import WSGIRequestHandler

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...