Ich möchte den Standort des Benutzers ermitteln. Wenn ich den folgenden Code auf meinem lokalen Computer teste, wird die richtige Position zurückgegeben. Versucht, den Standort mit VPN zu ändern, und alles hat auch richtig funktioniert.
app.py:
@app.route('/')
def index():
url = 'http://freegeoip.net/json'
r = requests.get(url)
j = json.loads(r.text)
city = j['city']
print(city)
Wenn ich meine Site jedoch mit demselben Code auf Pythonany laufen lasse, wird immer eine falsche Stadt zurückgegeben, unabhängig davon, von wo aus ich eine Verbindung herstelle. Gibt es stattdessen den Standort des Servers zurück? Wie kann ich den richtigen Standort für jeden Benutzer ermitteln?
Sie verwenden Ihre Server-IP für die Geolokalisierung. Wenn Sie diesen bestimmten Endpunkt besuchen, werden die Client-IP-Adressen verwendet. Wenn Sie also Ihre App für Pythonanywhere bereitgestellt haben, wird der Client für diesen Endpunkt zum Server.
Wenn Sie das lokal auf Ihrem PC ausgeführt haben, haben Sie den API-Endpunkt unter Verwendung Ihrer IP-Adresse angefordert. Wenn Sie also zu VPN gewechselt sind, hat sich auch Ihre IP-Adresse geändert.
Um Ihren aktuellen Code zu korrigieren, müssen Sie die IP-Adresse des Clients an den freegeoip.net/json
Endpunkt übergeben. Versuche dies:
from flask import request
@app.route('/')
def index():
url = 'http://freegeoip.net/json/{}'.format(request.remote_addr)
r = requests.get(url)
j = json.loads(r.text)
city = j['city']
print(city)
Beachten Sie jedoch, dass dieser API-Endpunkt veraltet ist und am 1. Juli 2018 nicht mehr funktioniert. Weitere Informationen finden Sie unter: https://github.com/apilayer/freegeoip#readme. Möglicherweise möchten Sie den neuen Dienst verwenden - Meine Lösung gilt weiterhin für die neue API.
In einigen Fällen (wie in Pythonanywhere) befindet sich möglicherweise ein Proxyserver vor Ihrer Web-App, wodurch der Server request.remote_addr
unbrauchbar wird. In diesem Fall sollten Sie den X-Forwarded-For
Header verwenden. Denken Sie jedoch daran, den richtigen Wert zu verwenden. Schauen Sie sich diese gute Lösung für weitere Informationen an .
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen