You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask API调用异常:Python请求正常,React Fetch请求报错

Flask API在React Fetch调用中报错的问题

问题情况

我用Python Flask开发了一个网站爬取API,返回JSON格式数据。使用Python的requests库发送POST请求时完全正常,但在React应用中用Fetch函数调用该API时,服务器端持续出现错误。两者发送的请求参数看似一致,但返回结果截然不同。

正常运行的Python请求代码

import requests
import json
data = {
    'act': '',
    'pw': '',
    'req': 'grades',
}

response = requests.post('http://127.0.0.1:5000/', data=data)
print(response.text)

运行异常的React Fetch代码

useEffect(() => {
    fetch('http://127.0.0.1:5000/', {
        method: 'POST',
        body: new URLSearchParams({
            'act': '',
            'pw': '',
            'req': 'grades'
        })
    }).then(response => {
        console.log('Response:', response)
        return response.json();
    }).then(response => console.log(response))
}, []); 

问题原因与解决方法

1. 缺少Content-Type请求头

Python的requests.post在传入data参数时,会自动设置Content-Type: application/x-www-form-urlencoded请求头,Flask端依赖这个头来识别表单数据并通过request.form获取参数。而React的Fetch使用URLSearchParams时,部分浏览器不会自动添加这个头,导致Flask无法正确解析参数。

解决办法:给Fetch请求手动添加请求头:

useEffect(() => {
    fetch('http://127.0.0.1:5000/', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: new URLSearchParams({
            'act': '',
            'pw': '',
            'req': 'grades'
        })
    }).then(response => {
        console.log('Response:', response)
        return response.json();
    }).then(response => console.log(response))
}, []); 

2. 跨域资源共享(CORS)问题

如果React应用运行在和Flask不同的端口(比如React默认3000,Flask默认5000),浏览器会触发跨域限制,导致请求被拦截。

解决办法:在Flask项目中启用CORS:

  • 首先安装依赖:pip install flask-cors
  • 在Flask代码中添加配置:
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # 允许所有来源的跨域请求

# 后续的API路由定义...

3. 确认Flask端参数获取方式

确保Flask代码中是通过request.form来获取POST参数,而不是request.json。例如:

from flask import request, jsonify

@app.route('/', methods=['POST'])
def handle_request():
    act = request.form.get('act')
    pw = request.form.get('pw')
    req = request.form.get('req')
    # 后续逻辑处理...
    return jsonify({'status': 'success', 'data': ...})

内容的提问来源于stack exchange,提问作者BillyBobJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:30:10