Как я могу получить IP-адрес клиента запроса Tornado?

У меня есть объект RequestHandler для входящих post() s. Как я могу найти IP клиента, делающего запрос? Я просмотрел большинство методов и свойств RequestHandler и, похоже, что-то пропустил.

Ответ 1

RequestHandler.request.remote_ip (из экземпляра RequestHandler)

вы можете проверить ответ как:

...
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write(repr(self.request))
...

Ответ 2

Ответ mykhal правильный, однако иногда ваше приложение будет находиться за прокси-сервером, например, если вы используете nginx и UWSGI, и вы всегда получите что-то вроде 127.0.0.1 для удаленного IP-адреса. В этом случае вам также необходимо проверить заголовки, например:

remote_ip = self.request.headers.get("X-Real-IP") or \
            self.request.headers.get("X-Forwarded-For") or \
            self.request.remote_ip

Изменить 17 октября 2019 года: включить широко используемый заголовок X-Forwarded-For, который используется балансировщиками нагрузки AWS среди прочих.