python - 部署到 heroku 后位置更改为 Ashburn
问题描述
我正在使用 openweathermap 获取天气数据并检测用户的位置并显示数据......当我在 localhost 中使用它时,我得到了正确的位置,但是当我将它部署到 heroku 时,它显示的位置为 Ashburn.. .如何解决这个问题?
我正在使用它来获取用户的位置: https ://ip-geolocation.whoisxmlapi.com/api/v1?apiKey=myApiKey
url1='https://ip-geolocation.whoisxmlapi.com/api/v1?apiKey=MyApiKey'
res = requests.request('GET', url1)
Jdata = res.json()
city = Jdata['location']['city']
completed_url = "http://api.openweathermap.org/data/2.5/weather?
appid=myapiid&q="+city
r = requests.get(completed_url)
abcd = r.json()
abcdmain = abcd['main']
https://apiappanirudh.herokuapp.com/
访问应用程序的上述链接..
我希望应用程序检测用户的位置,然后显示...位置更改背后的原因是什么以及如何解决?
注意:我正在使用烧瓶。
谢谢。
解决方案
使用 IP 地理定位 API 时,您应该区分两种情况:是从客户端调用地理定位 API还是从服务器端调用地理定位 API 。
在前一种情况下,这意味着您正在从客户端浏览器查询 IP 地理定位 API,例如使用 JavaScript。在这种情况下,大多数地理定位 API 都提供了一个原始端点,您无需指定任何 IP 地址即可调用该端点。您将获得与运行浏览器的客户端关联的 IP 地址的信息。这是使用Ipregistry的示例:
https://api.ipregistry.co/?key=tryout&pretty=true
在后一种情况下,您将收到对您的服务器的请求,并且您正在从您的服务器调用 IP 地理定位 API。它可以使用 PHP、NodeJS、Java,以及应用服务器或代理背后的任何编程语言。如果我们画一个流程图,它看起来如下:
A client --> Your server --> IP geolocation API
如果您在没有指定更多信息的情况下调用 IP 地理定位 API,那么地理定位 API 所能做的最好的事情就是发现服务器后面的 IP 地址是什么(即请求的来源)。这就是你描述的问题和你所经历的。
希望大多数 IP 地理定位 API 都包含一个端点,您可以在其中指定要查找数据的 IP 地址。因此,当您在服务器上收到来自客户端的请求时,您需要从请求中提取客户端 IP 地址,然后使用允许传递 IP 地址的专用 IP 地理定位 API 端点。
如何从您在服务器上收到的请求中提取客户端 IP 地址?这是特定于您的应用程序的。这就是为什么没有一种适合所有解决方案的原因。大多数情况下,请求标头中包含您要查找的值。例如,标头X-Forwarded-For很常见但不是标准的。在 PHP 中,您需要使用$_SERVER['REMOTE_ADDR']
.
假设您将客户端 IP 地址标识为200.77.121.230,然后使用 Ipregistry,您将通过对下一个端点的 HTTP GET 请求获取位置和威胁数据:
https://api.ipregistry.co/200.77.121.230?key=tryout&pretty=true
推荐阅读
- python - 如何将带有布尔数组的 np.infs 数组的所有索引清零?
- r - 如何使用过滤器从组中删除值?
- mysql - 连接 4 个相互引用良好的表
- spring - 客户端检出连接的尝试已超时
- micronaut - Micronaut 是否对请求内容类型标头处理不当?
- javascript - Canvas.getContext : 一旦事件发生改变对象的颜色
- python - 使用python在列中返回值而不是按行从文件中打印行
- android - 有没有办法在没有 AVD 信用的情况下模拟移动连接?
- java - 我可以在不破坏向后兼容性的情况下将 Java 中的常量从 int 更改为 byte 吗?
- html - 视差背景不重复