Flutter调用Flask REST API时安卓模拟器出现连接超时问题
问题:Flutter安卓模拟器请求Flask API超时
用Flask搭建的REST API在Postman测试正常,但安卓模拟器中Flutter发起请求时出现「Connection timed out」错误。已知晓模拟器需用10.0.2.2而非127.0.0.1,且已配置请求地址为10.0.2.2:8000,但仍无法获取响应。
API代码
from collections import defaultdict from flask import Flask, request, jsonify app = Flask(__name__) @app.route("/") def home(): return {"message": "Hello and Welcome"} @app.route("/getkeywords", methods=["POST"]) def getKeywords(): res = request.get_json() text = res["text"] data = extractKeywords(text) # print(text) return jsonify({"data": data}) from rake_nltk import Rake def extractKeywords(text: str): r = Rake() r.extract_keywords_from_text(text) data = defaultdict(list) for rating, keyword in r.get_ranked_phrases_with_scores(): data[rating].append(keyword) return data if __name__ == "__main__": app.run(debug=True)
Flutter请求代码
Future<void> getKeywords(String text) async { String mainURL = "http://10.0.2.2:8000/getkeywords"; final response = await http.post(Uri.parse(mainURL), body: {"text": text}); if (response.statusCode == 200) { print(response.body); } else { throw Exception("Failed to get data"); } }
调试控制台输出

排查解决步骤
修正Flask服务端口与绑定地址
Flask默认启动端口为5000,但你的Flutter请求用的是8000,同时需允许外部设备访问。修改启动代码:app.run(debug=True, port=8000, host='0.0.0.0')host='0.0.0.0'让服务绑定所有可用网卡,避免仅本地可访问。统一请求数据格式
Flutter当前发送的是表单数据,但Flask用request.get_json()接收JSON格式,需修改Flutter请求:import 'dart:convert'; Future<void> getKeywords(String text) async { String mainURL = "http://10.0.2.2:8000/getkeywords"; final response = await http.post( Uri.parse(mainURL), headers: {"Content-Type": "application/json"}, body: jsonEncode({"text": text}) ); if (response.statusCode == 200) { print(response.body); } else { throw Exception("Failed to get data"); } }检查本地防火墙
确保本地防火墙允许8000端口的入站连接,避免拦截模拟器的请求。验证网络连通性
在安卓模拟器浏览器中访问http://10.0.2.2:8000,若能看到Flask的欢迎消息,说明网络通路正常;若不行,重新检查Flask启动配置和防火墙。
内容的提问来源于stack exchange,提问作者Ozone317
相关产品推荐
相关产品推荐

