React Native Expo APK无法请求本地Python Flask服务器的解决方法
Expo 应用连接本地 Flask 服务器实现指南
1. 获取笔记本的本地WiFi IP地址
首先确定笔记本在当前WiFi下的局域网IP,这是手机访问服务器的核心地址:
- Windows:打开命令提示符,输入
ipconfig,找到「无线局域网适配器 WLAN」下的「IPv4地址」,比如192.168.1.105 - Mac/Linux:打开终端,输入
ifconfig(或ip addr),找到WiFi接口(如en0)下的inet地址
2. 配置Flask服务器允许外部访问
Flask默认仅监听本地回环地址(127.0.0.1),无法被局域网内其他设备访问,必须修改绑定设置:
- 命令行启动:执行
flask run --host=0.0.0.0 --port=5000,0.0.0.0表示监听所有可用网络接口 - 代码内配置:修改Flask启动逻辑:
from flask import Flask app = Flask(__name__) @app.route('/api/submit-data', methods=['POST']) def submit_data(): # 自定义数据处理逻辑 return {"status": "success"} if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True) - 防火墙设置:确保笔记本防火墙允许5000端口(或你指定的端口)的入站请求。Windows可在防火墙高级设置中添加「入站规则」开放端口;Mac/Linux可临时关闭防火墙测试,或用
ufw allow 5000(Ubuntu)开放端口。
3. 配置Expo应用的API请求
不要使用localhost或127.0.0.1(这指向手机自身),直接用笔记本的局域网IP构建请求地址:
// 示例:用fetch发送POST请求 const submitData = async () => { try { const response = await fetch('http://192.168.1.105:5000/api/submit-data', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ key: 'value' }), }); const result = await response.json(); console.log(result); } catch (error) { console.error('请求失败:', error); } };
4. Android 必要权限与网络配置
网络权限
在Expo项目的app.json中添加网络权限:
{ "expo": { "android": { "permissions": ["INTERNET"] } } }
允许明文HTTP请求(Android 9+)
Android 9及以上默认禁止明文HTTP请求(仅允许HTTPS),如果你的Flask服务器用的是HTTP,需配置网络安全策略:
在app.json的android字段中添加:
{ "expo": { "android": { "networkSecurityConfig": { "domainConfigs": [ { "domain": "192.168.1.105", // 替换为你的笔记本IP "cleartextTrafficPermitted": true } ] }, "permissions": ["INTERNET"] } } }
重新生成APK后,应用即可向指定IP发送明文HTTP请求。
5. 常见问题排查
- 先在手机浏览器中访问
http://你的笔记本IP:5000,若能打开Flask默认页面,说明网络连通;若打不开,检查WiFi是否同网段、防火墙是否拦截、Flask是否正确绑定0.0.0.0 - 查看Flask控制台日志,若有请求记录但返回错误,检查API端点逻辑;若无请求记录,说明网络层面未连通
- 确认手机未连接VPN或代理,这会干扰局域网访问
- 部分路由器的「访客模式」会隔离设备,确保手机和笔记本连接的是同一个主WiFi网络
内容的提问来源于stack exchange,提问作者176_Rajiv_Kumar_Sah
相关产品推荐
相关产品推荐

