部署到 heroku 后位置更改为 Ashburn
Location changed to Ashburn after deploying to heroku
我正在使用 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/
访问上述 link 应用程序..
我希望该应用检测用户的位置,然后显示...位置更改背后的原因是什么以及如何解决?
注意:我用的是flask。
谢谢。
当使用 IP 地理定位 API 时,您应该区分 2 种情况:您是从 client-side 调用您的地理定位 API 和来自 server-side.
在前一种情况下,这意味着您正在从客户端浏览器查询 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 地址?这是特定于您的应用程序的。这就是为什么没有一种适合所有解决方案的原因。大多数情况下,请求 header 包含您要查找的值。例如,header 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
我正在使用 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/
访问上述 link 应用程序..
我希望该应用检测用户的位置,然后显示...位置更改背后的原因是什么以及如何解决?
注意:我用的是flask。
谢谢。
当使用 IP 地理定位 API 时,您应该区分 2 种情况:您是从 client-side 调用您的地理定位 API 和来自 server-side.
在前一种情况下,这意味着您正在从客户端浏览器查询 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 地址?这是特定于您的应用程序的。这就是为什么没有一种适合所有解决方案的原因。大多数情况下,请求 header 包含您要查找的值。例如,header 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