当前位置: 首页 > news >正文

uniapp安卓端+ fastapi(后端)获取到设备的ip

有办法获取!核心是 后端 FastAPI 直接获取请求端 IP,Uniapp 安卓端无需额外操作(IP 由网络请求自动携带),以下是具体实现:

核心原理

用户设备(安卓端)向 FastAPI 后端发送网络请求时,请求头中会携带设备的 IP 信息(经路由器/运营商转发后的公网 IP,或局域网 IP),FastAPI 可通过 Request 对象提取。

实现步骤

1. FastAPI 后端:获取 IP 核心代码
from fastapi import FastAPI, Requestapp = FastAPI()# 接口示例:获取请求设备的 IP
@app.get("/get_device_ip")
async def get_device_ip(request: Request):# 1. 优先从 X-Real-IP 头获取(适用于有反向代理的场景,如 Nginx)client_ip = request.headers.get("X-Real-IP")# 2. 若无反向代理,从 remote_addr 获取(直接请求时)if not client_ip:client_ip = request.client.host  # 格式:"192.168.1.100"(局域网)或公网 IP# 3. 若部署在反向代理后(如 Nginx),需额外配置(见下方注意事项)return {"device_ip": client_ip,"msg": "IP 获取成功"}
2. Uniapp 安卓端:发送请求(无需额外处理)

Uniapp 只需正常发送网络请求(uni.request),IP 会随请求自动传递给后端,无需手动携带:

// Uniapp 安卓端代码
uni.request({url: "http://你的FastAPI地址/get_device_ip",  // 注意:需用公网地址(如服务器域名/公网IP)method: "GET",success: (res) => {console.log("设备 IP:", res.data.device_ip);  // 打印后端返回的 IP},fail: (err) => {console.log("请求失败:", err);}
});

关键注意事项

(1)获取的 IP 类型说明
  • 若安卓端和后端在 同一局域网(如连同一个 WiFi):后端获取的是设备的 局域网 IP(如 192.168.1.105)。
  • 若安卓端用 4G/5G 移动网络,或后端部署在公网服务器(如阿里云):后端获取的是设备的 公网 IP(如 120.234.xx.xx)。
  • 无法获取设备的 内网真实 IP(如手机蜂窝网络的内网 IP),只能获取经路由/运营商转发后的 IP。
(2)部署反向代理(如 Nginx)后的配置

若后端通过 Nginx 反向代理(如公网部署时),request.client.host 会获取到 Nginx 的 IP(而非设备 IP),需在 Nginx 中添加以下配置,传递真实 IP 到 FastAPI:

# Nginx 配置示例(http 块或 server 块中)
location / {proxy_pass http://127.0.0.1:8000;  # 指向 FastAPI 服务# 传递真实 IP 到后端proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;
}
(3)Uniapp 跨域问题

若 FastAPI 和 Uniapp 域名/端口不同,需在后端配置跨域,允许 Uniapp 访问:

from fastapi.middleware.cors import CORSMiddlewareapp.add_middleware(CORSMiddleware,allow_origins=["*"],  # 开发环境可设为 *,生产环境指定 Uniapp 域名allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)

效果验证

  1. 启动 FastAPI 后端(uvicorn main:app --host 0.0.0.0 --port 8000)。
  2. 安卓端(真机或模拟器)运行 Uniapp 代码,发送请求。
  3. 后端会返回设备的 IP 地址,Uniapp 可接收并使用。

总结

  • 无需 Uniapp 端额外处理,IP 由网络请求自动携带。
  • 核心是 FastAPI 通过 Request.client.host 或请求头 X-Real-IP 获取。
  • 公网部署需配置 Nginx 传递真实 IP,避免反向代理遮挡。

这种方式简单可靠,是 Uniapp + FastAPI 获取设备 IP 的最优方案。要不要我帮你整理一份 完整的前后端可运行代码

http://www.dtcms.com/a/539937.html

相关文章:

  • hardhat 搭建智能合约
  • 【开题答辩实录分享】以《智慧校园勤工俭学信息管理系统的设计与实现》为例进行答辩实录分享
  • Elasticsearch安装与配置全指南
  • BIM引擎中火焰模拟
  • SPI NOR Flash 家族的常见存储结构
  • billu_b0x 靶机渗透测试
  • RPA 如何成为 AI 智能体的落地引擎
  • 快递比价寄件系统技术解析:基于PHP+Vue+小程序的高效聚合配送解决方案
  • 巢湖市重点工程建设管理局网站易企秀网站怎么做轮播图
  • 免费画图网站微信公众官网登录入口
  • SAP SD借贷项凭证创建接口分享
  • uniapp(2)自定义tabbar
  • 技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUIC
  • 【Linux】编辑器vim的使用和理解gcc编译器
  • uniapp如何集成第三方库
  • 易灵思FPGA的RISC-V核操作函数
  • BOTA发布新一代力觉核心:Gen A六维力矩传感器,为下一代机器人研发,注入精准感知
  • 180课时吃透Go语言游戏后端开发14:map类型
  • AWS × Caddy:一键部署多站点反向代理 + 负载均衡网关(Terraform + ECS Fargate)
  • 外贸电子商务网站jcms内容管理系统
  • 做外贸哪些网站可以发免费信息线上课程怎么做
  • [无人机sdk] CameraModule | GimbalModule
  • 无人机桥梁巡检:以“空天地”智慧之力守护交通生命线
  • 【代码随想录算法训练营——Day51】图论——99.计数孤岛、100.最大岛屿的面积
  • d44:Sentinel 微服务流量控制与 Seata 分布式事务
  • Nacos注册中心:从服务注册到负载均衡
  • 归并排序和计数排序详解(非比较排序)
  • Nginx‌如何配置负载均衡,并使用对不同同负载均衡算法进行配置
  • 网站管理平台扩展插件广告人网站
  • HarmonyOS视频编解码与转码深度探索:从原理到分布式实践