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

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");
  }
}

调试控制台输出

调试输出


排查解决步骤

  1. 修正Flask服务端口与绑定地址
    Flask默认启动端口为5000,但你的Flutter请求用的是8000,同时需允许外部设备访问。修改启动代码:

    app.run(debug=True, port=8000, host='0.0.0.0')
    

    host='0.0.0.0'让服务绑定所有可用网卡,避免仅本地可访问。

  2. 统一请求数据格式
    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");
      }
    }
    
  3. 检查本地防火墙
    确保本地防火墙允许8000端口的入站连接,避免拦截模拟器的请求。

  4. 验证网络连通性
    在安卓模拟器浏览器中访问http://10.0.2.2:8000,若能看到Flask的欢迎消息,说明网络通路正常;若不行,重新检查Flask启动配置和防火墙。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:42:40