Я разрабатываю сервер Flask для связи между некоторыми внутренними функциями Python и клиентами Javascript через Интернет. Я пытаюсь использовать переменную Flask session
для хранения пользовательских данных в течение времени их взаимодействия с приложением. Я удалил большую часть приведенного ниже кода приложения, но основная проблема, с которой я столкнулся, осталась.
Вот мой код для моего (упрощенного) приложения Flask:
import json
import os
from flask import Flask, jsonify, request, session
app = Flask(__name__)
app.secret_key = 'my_secret_key'
@app.route('/', methods=['GET'])
def run():
session['hello'] = 'world'
return jsonify(session['hello'])
@app.route('/update', methods=['POST'])
def update():
return jsonify(session['hello'])
if __name__ == '__main__':
app.run(host='0.0.0.0')
Используя Postman, я могу сделать запрос GET на свой сервер и получить ожидаемый результат "world"
. Затем я могу сделать запрос POST с произвольным телом и получить тот же ожидаемый результат "world"
(снова используя Postman).
При использовании Chrome я могу посетить IP-адрес своего сервера и увидеть ожидаемый результат "world"
на странице. Я также могу вручную сделать запрос GET с помощью Javascript (в консоли Chrome) и получить тот же ответ, что и ожидалось. Однако моя проблема возникает при попытке отправить запрос POST на сервер с помощью Javascript; сервер показывает KeyError: 'hello'
при попытке сделать этот запрос.
Вот код Javascript, который я использую для выполнения POST-запроса:
var url = 'http://my_server_ip/update';
fetch(url, {
method: 'POST',
body: JSON.stringify('arbitrary_string'),
headers: new Headers({
'Content-Type': 'application/json'
})
})
.then(response => response.json())
.then((data) => {
console.log(data);
})
Что здесь происходит? Почему я могу нормально выполнять запросы GET/POST с помощью Postman, но сталкиваюсь с ошибками при выполнении тех же запросов с помощью Javascript?
Вы должны опубликовать свой запрос с файлом cookie, который вы получаете после запроса '/'.
Удивительно, но GET работает в запросе JavaScript, возвращающем
world
. Я пытался с заголовком cookie сеанса, но запрос POST все еще терпит неудачу.