XuLaLa.Tech

首页客户端下载Windows 使用V2Ray 教程SSR 教程Clash 教程

如何使用Cloudflare Workers实现查询IP地理位置信息API(强烈推荐)?

2025.04.09

在Web 开发中,获取用户的地理位置信息对许多应用场景非常重要,比如根据用户所在地调整内容、提高安全性、进行数据分析、国际化站点跳转等等。借助 Cloudflare Workers,开发者可以轻松创建一个高效的 API,来查询 IP 地址的地理位置信息,大家很容易就可以获得一个免费地理位置API,强烈推荐。

本文将详细介绍如何使用 Cloudflare Workers 构建一个查询 IP 地理位置信息的 API,并结合 Cloudflare 提供的免费 GeoIP 数据,快速实现此功能。

文章目录

  • 1 一、什么是 Cloudflare Workers?
  • 2 二、实现查询 IP 地理位置信息的 API
    • 2.1 开始使用 Cloudflare Workers
    • 2.2 编写 Worker 代码
    • 2.3 部署 Worker
    • 2.4 测试 API
  • 3 三、优化与扩展
    • 3.1 指定 IP 查询
    • 3.2 安全性与限流
  • 4 四、总结

一、什么是 Cloudflare Workers?

Cloudflare Workers 是一个无服务器(Serverless)平台,允许开发者在 Cloudflare 的全球网络上运行 JavaScript、WASM 等代码。相比传统的后端架构,它具有以下优势:

  • 低延迟:基于 Cloudflare 的全球网络,代码在距离用户最近的边缘节点运行,响应速度极快。
  • 弹性扩展:自动扩展,适应任意流量大小,不需要担心服务器负载。
  • 灵活的编程:支持 JavaScript、TypeScript 和 WebAssembly 等主流开发语言,适合构建各种服务。

二、实现查询 IP 地理位置信息的 API

开始使用 Cloudflare Workers

要创建一个 Cloudflare Worker,首先需要一个 Cloudflare 账户。以下是设置步骤:

  1. 前往 Cloudflare Workers。
  2. 登录 Cloudflare 账户,或者注册一个新的账户。
  3. 创建一个新的 Worker。

编写 Worker 代码

Cloudflare 在每个 HTTP 请求中自动附带 GeoIP 数据,因此我们可以轻松访问用户的地理位置信息,而无需外部 API。这些数据包括:

  • 国家(request.cf.country
  • 时区(request.cf.timezone
  • 地区代码(request.cf.region
  • 城市(request.cf.city
  • 纬度与经度(request.cf.latituderequest.cf.longitude

以下是我的 Cloudflare Worker的配置,它接收一个 IP 请求并返回该 IP 的地理位置信息:

export default {
async fetch(request, env, ctx) {
const data = {
Method: request.method,
Url: request.url,
IP: {
IP: request.headers.get('CF-Connecting-IP'),
Continent: request.cf.continent,
Country: request.cf.country,
IsEU: request.cf.isEUCountry,
Region: request.cf.region,
RegionCode: request.cf.regionCode,
City: request.cf.city,
Latitude: request.cf.latitude,
Longitude: request.cf.longitude,
PostalCode: request.cf.postalCode,
MetroCode: request.cf.metroCode,
Colo: request.cf.colo,
ASN: request.cf.asn,
ASOrganization: request.cf.asOrganization,
Timezone: request.cf.timezone
},
Headers: {},
Security: {}
};
// 遍历并存储每个 HTTP 头,排除以 cf- 开头的 HTTP 头
request.headers.forEach((value, name) => {
if (!name.toLowerCase().startsWith('cf-')) {
data.Headers[name] = value;
}
});
// 遍历 request.cf 并存储所需对象的属性到 Security 中
for (const key in request.cf) {
if (
key == 'clientTcpRtt'
|| key == 'tlsCipher'
|| key == 'tlsVersion'
|| key == 'httpProtocol'
|| key == 'clientHandshake'
|| key == 'clientFinished'
|| key == 'serverHandshake'
|| key == 'serverFinished'
|| key == 'corporateProxy'
|| key == 'verifiedBot'
|| key == 'score'
) {
if (typeof request.cf[key] === 'object') {
for (const innerKey in request.cf[key]) {
data.Security[innerKey] = request.cf[key][innerKey];
}
} else {
data.Security[key] = request.cf[key];
}
}
}
var dataJson = JSON.stringify(data, null, 4);
//console.log(dataJson);
return new Response(dataJson, {
headers: {
"Content-Type": "application/json;charset=UTF-8",
"Access-Control-Allow-Origin": "https://www."
}
})
},
};

部署 Worker

编写完代码后,可以将 Worker 部署到 Cloudflare 边缘网络上:

  1. 在 Cloudflare Workers 界面中点击“Save and Deploy”。
  2. 部署成功后,Cloudflare 会为你的 Worker 分配一个 URL,你可以通过该 URL 来访问你的 API。
例如,API 的访问路径可能是:https://your-worker-url.workers.dev/

测试 API

你可以使用 curl 或者浏览器直接请求你的 API,验证它是否能正确返回 IP 地址的地理位置信息。
curl https://your-worker-url.workers.dev/

API 将返回类似如下的响应:

三、优化与扩展

指定 IP 查询

有时,你可能想查询指定 IP 地址的地理信息,而不仅仅是查询请求发起者的 IP 地址。Cloudflare Workers 支持通过自定义逻辑来处理这种需求。

可以修改代码,使其接受查询参数,从而处理特定 IP 的地理位置信息。例如:

async function handleRequest(request) {
const url = new URL(request.url)
const ip = url.searchParams.get('ip')
// 如果没有提供 IP,则使用请求的源 IP
const cf = ip ? { country: 'XX', city: 'Example' } : request.cf
if (cf) {
const geoInfo = {
country: cf.country || 'Unknown',
region: cf.region || 'Unknown',
city: cf.city || 'Unknown',
latitude: cf.latitude || 'Unknown',
longitude: cf.longitude || 'Unknown',
timezone: cf.timezone || 'Unknown'
}
return new Response(JSON.stringify(geoInfo), {
headers: { 'Content-Type': 'application/json' }
})
} else {
return new Response('Unable to retrieve IP geo information', { status: 400 })
}
}

安全性与限流

由于 IP 信息是敏感数据,为了防止滥用,可以在 API 上加上速率限制(Rate Limiting),并使用 Cloudflare 提供的安全功能,如 WAF(Web Application Firewall)来过滤恶意请求。

最后注意cloudflare的worker每天的调用次数是有限的10万次,一般的网站够用了,具体看这里。

四、总结

通过 Cloudflare Workers,我们可以轻松构建一个查询 IP 地理位置信息的 API,利用 Cloudflare 内置的 GeoIP 数据,不需要额外依赖外部服务。同时,借助 Cloudflare 全球边缘网络,API 的性能非常高,并且具备极好的弹性和安全性。

这种 API 可以用于多种场景,比如动态内容本地化、安全性增强以及用户分析等。在构建过程中,我们只需要编写少量代码,并且 Cloudflare 提供了简洁的开发体验,让开发者可以快速上线自己的服务。

© 2010-2022 XuLaLa 保留所有权利 本站由 WordPress 强力驱动
请求次数:69 次,加载用时:0.665 秒,内存占用:32.19 MB