获取 urllib.error.HTTPError:HTTP 错误 423:从 Flask 应用程序中的 api.ipgeolocation.io 锁定

问题描述 投票:0回答:2

我正在创建一个 Flask 应用程序,在我的 routes.py 的这一部分中,我想使用 api.ipgeolocation.io 从他们的 IP 获取访问者的国家和城市,但出现错误 urllib.error.HTTPError: HTTP Error 423:锁定

import json
from urllib.request import urlopen
from flask import request
...
public_ip = request.remote_addr
url = 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip={}'.format(public_ip)
response = urlopen(url)
data = json.load(response)
country = data['country_name']
city = data['city']

我使用固定IP进行测试,例如。 8.8.8.8 有效。

url = 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip={}'.format("8.8.8.8")
>>>OUTPUT: United States, Mountain View

我不知道我错在哪里,任何帮助将不胜感激,谢谢。

json flask urllib urlopen
2个回答
1
投票

我也遇到了同样的反应。对我来说,问题是我正在传递内部IP。我最终将调用包装在 try catch 中并“忽略”内部 IP,因为不需要包含它们。 HTH.


0
投票

如果您位于 Web 服务器(或负载均衡器)后面,

request.remote_addr
将包含 Web 服务器的内部 IP 地址。

在这种情况下,您需要从 Web 服务器转发客户端的外部 IP 地址。

以 NGINX 为例,您需要在位置块中添加类似以下内容:

proxy_set_header X-Client-Address $remote_addr;

然后可以从请求头中读取

X-Client-Address
的值;

© www.soinside.com 2019 - 2024. All rights reserved.