Получить местоположение пользователя в Flask - PullRequest
0 голосов
/ 09 мая 2018

Я хочу получить местоположение пользователя. Когда я проверяю следующий код на моем локальном компьютере, он возвращает правильную позицию. Пытался сменить местоположение с помощью vpn и все тоже работало правильно.
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)

Но когда я запускаю свой сайт с одинаковым кодом на pythonany везде, он всегда возвращает один неправильный город, не имеет значения, откуда я подключаюсь. Вместо этого он возвращает местоположение сервера? Как я могу получить правильное местоположение каждого пользователя?

1 Ответ

0 голосов
/ 09 мая 2018

Вы используете IP своего сервера для геолокации. Когда вы посещаете эту конкретную конечную точку, она принимает IP-адреса клиента, поэтому при развертывании приложения в Pythonanywhere клиент на этой конечной точке становится сервером.

Когда вы работали локально на вашем ПК, вы запрашивали конечную точку API, используя свой IP-адрес - поэтому, если вы переключились на VPN, ваш IP-адрес также изменился.

Чтобы исправить текущий код, вам нужно передать IP-адрес клиента конечной точке freegeoip.net/json. Попробуйте это:

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)

Однако имейте в виду, что эта конечная точка API устарела и перестанет работать 1 июля 2018 года. Для получения дополнительной информации посетите: https://github.com/apilayer/freegeoip#readme - возможно, вы захотите начать использовать их новую услугу - мое решение все еще применимо к их новому API.

В некоторых случаях (например, в Pythonanywhere) перед вашим веб-приложением может находиться прокси-сервер, что делает request.remote_addr бесполезным. В этом случае вы должны использовать заголовок X-Forwarded-For. Не забудьте использовать правильное значение, хотя. Посмотрите на это хорошее решение для получения дополнительной информации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...