标题可能看起来有点奇怪,但我有一个情况,我有一个 Web 应用程序(Node.js 应用程序在 Azure Frontdoor + Azure 应用服务后面提供),并且需要知道请求是否来自苏格兰,以便我可以向用户显示一些特定资源(主要是图像)来代替默认资源。
我希望以编程方式执行此操作,利用 Frontdoor 的功能将某些内容注入到进入应用服务的请求中,然后检查 Node.js 应用程序中的标头并决定以这种方式加载哪些资产。
但是,Frontdoor 只会告诉我请求是否源自英国。我还查看了一些库/API,但似乎没有什么是那么精细的。我还尝试查找苏格兰境内是否有 IP 范围的规范列表,但(预期)没有结果。
我知道这个问题可以通过改变用户体验来解决(即在旅程开始时询问某人居住在哪里),但希望让事情变得更加无缝。
如有任何建议,我们将不胜感激。
您可以使用像 https://ipinfo.io/ 这样的服务,它有一个
IP Geolocation API
。
您可以从 Frontdoor 的 header
X-Azure-ClientIP
中获取用户 IP,然后调用 API 来获取区域。此外,您应该将该信息链接到用户以实现持久性,您不必在每次用户访问您的网站时都进行 API 调用。
免责声明——我与 ipinfo.io 没有任何关系。
正如Lauden在他的answer中提到的,ipinfo.io的IP Geolocation API是一个方便的选择。对于少量批量请求(例如同一请求 IP 每天 100-150 个),该服务是免费的,对于更专业的用途,有付费模型。
例如,您可以使用
curl
检查区域,如下所示:
curl -s https://ipapi.co/$IP/region
比你会得到例如
$ curl -s https://ipapi.co/84.64.83.219/region
Scotland
$ curl -s https://ipapi.co/82.37.113.61/region
Scotland
如果替换
region
并检查参数 city
,第一个生成格拉斯哥,第二个生成爱丁堡。