Сделать запрос POST при перенаправлении в колбу

Я работаю с колбой. Я нахожусь в ситуации, когда мне нужно перенаправить почтовый запрос на другой URL-адрес, сохраняя метод запроса, то есть метод "POST". Когда я перенаправил запрос "GET" на другой URL, который принимает метод запроса "GET", это нормально. Вот пример кода, с которым я пытаюсь выше...

@app.route('/start',methods=['POST'])
def start():
    flask.redirect(flask.url_for('operation'))

@app.route('/operation',methods=['POST'])
def operation():
    return "My Response"

Я хочу сделать запрос "POST" к URL "/start", который внутренне также делает запрос "POST" к URL "/operation". Если я изменяю код следующим образом,

@app.route('/operation',methods=['GET'])
def operation():
    return "My Response"

Код отлично работает для запроса "GET". Но я тоже хочу сделать POST-запрос.

1 ответ

Решение

redirect функция предусмотрена в Flask отправляет код состояния 302 клиенту по умолчанию и, как упоминалось в Википедии:

Многие веб-браузеры реализовали этот код способом, который нарушал этот стандарт, изменяя тип запроса нового запроса на GET, независимо от типа, используемого в исходном запросе (например, POST). [1] По этой причине в HTTP/1.1 (RFC 2616) добавлены новые коды состояния 303 и 307 для устранения неоднозначности между двумя вариантами поведения: 303 предписывает изменение типа запроса на GET и 307 сохраняет тип запроса в том виде, в котором он был первоначально отправлен.

Таким образом, отправка кода состояния 307 вместо 302 должна сообщить браузеру о необходимости сохранить используемый метод HTTP и, таким образом, иметь ожидаемое поведение. Ваш звонок в redirect будет выглядеть так:

flask.redirect(flask.url_for('operation'), code=307)
Другие вопросы по тегам