在 Express.js 中检索客户端的 IP 地址
Express.js 是一个流行的 Node.js 框架,它简化了构建 Web 应用程序的过程。要在 Express 应用程序中获取客户端的 IP 地址,您可以访问框架提供的 req.ip 属性。但是,在应用程序位于代理或负载均衡器后面的情况下,客户端的 IP 可能存储在 X-Forwarded-For 标头中。要在这种情况下准确检索客户端的 IP,请考虑以下方法:
const express = require('express'); const app = express(); app.use((req, res, next) => { const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress; console.log(`Client IP: ${clientIp}`); next(); }); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
在此设置中,中间件函数从 X-Forwarded-For 标头(如果存在)捕获客户端的 IP 地址;否则,它会回退到 req.connection.remoteAddress。这可以确保无论应用程序的部署环境如何,您都可以获得正确的 IP 地址。
使用 IPQuery 增强 IP 数据
获得客户的 IP 地址后,通过地理位置和风险评估信息丰富此数据可以提供有价值的见解。 IPQuery 是专为开发人员设计的强大 API,提供 VPN 检测、地理定位和威胁情报等功能。 IPQuery 同时支持 IPv4 和 IPv6,可提供低延迟的快速查找,使其成为实时应用程序的绝佳选择。
在 Express 应用程序中设置 IPQuery
要将 IPQuery 集成到您的 Express 应用程序中,请按照以下步骤操作:
Axios 是 Node.js 的基于 Promise 的 HTTP 客户端,可促进 HTTP 请求。使用 npm 安装它:
npm install axios
开发一个向 IPQuery API 发送请求并处理响应的函数:
const axios = require('axios'); async function getIpInfo(ip) { try { const response = await axios.get(`https://api.ipquery.io/${ip}?format=json`); return response.data; } catch (error) { console.error(`Error fetching IP information: ${error}`); return null; } }
修改 Express 中间件以利用 getIpInfo 函数:
app.use(async (req, res, next) => { const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress; const ipInfo = await getIpInfo(clientIp); if (ipInfo) { console.log(`Client IP: ${clientIp}`); console.log(`Location: ${ipInfo.location.city}, ${ipInfo.location.country}`); console.log(`ISP: ${ipInfo.isp.org}`); console.log(`Risk Score: ${ipInfo.risk.risk_score}`); } next(); });
该中间件检索客户端的 IP 地址,从 IPQuery 获取详细信息,并记录相关详细信息,例如位置、ISP 和风险评分。
理解 IPQuery 的响应结构
IPQuery 提供包含各种数据点的全面 JSON 响应:
{ "ip": "1.1.1.1", "isp": { "asn": "AS13335", "org": "Cloudflare, Inc.", "isp": "Cloudflare, Inc." }, "location": { "country": "Australia", "country_code": "AU", "city": "Sydney", "state": "New South Wales", "zipcode": "1001", "latitude": -33.854548400186665, "longitude": 151.20016200912815, "timezone": "Australia/Sydney", "localtime": "2024-09-03T22:22:52" }, "risk": { "is_mobile": false, "is_vpn": false, "is_tor": false, "is_proxy": false, "is_datacenter": true, "risk_score": 0 } }
关键组件包括:
更多详细信息,请参阅 IPQuery 文档。
以上是请求API的IP的详细内容。更多信息请关注PHP中文网其他相关文章!