Получить заголовки браузера в Python - PullRequest
11 голосов
/ 24 февраля 2012

Я сейчас рисую пробел, как получить текущую информацию заголовка браузера для пользователя в Python Tornado? Например, в PHP вы просто просматриваете данные $ _SERVER. Какая альтернатива Торнадо?

Примечание: Как мне получить клиентский IP-адрес запроса Tornado? и «запрос» у меня не работает.

Ответы [ 2 ]

22 голосов
/ 24 февраля 2012

Вот фрагмент, основанный на моем сервере, где мы получаем некоторые данные заголовка из запроса:

class api(tornado.web.RequestHandler):
    def initialize(self, *args, **kwargs):
        self.remote_ip = self.request.headers.get('X-Forwarded-For', self.request.headers.get('X-Real-Ip', self.request.remote_ip))
        self.using_ssl = (self.request.headers.get('X-Scheme', 'http') == 'https')
    def get(self):
        self.write("Hello " + ("s" if self.using_ssl else "") + " " + self.remote_ip)
2 голосов
/ 11 декабря 2014

Вы можете использовать логику, аналогичную tornado/httpserver.py или просто создать tornado.httpserver.HTTPServer() с помощью xheaders=True.

# Squid uses X-Forwarded-For, others use X-Real-Ip
ip = self.headers.get("X-Forwarded-For", self.remote_ip)
ip = ip.split(',')[-1].strip()
ip = self.headers.get(
    "X-Real-Ip", ip)
if netutil.is_valid_ip(ip):
    self.remote_ip = ip
# AWS uses X-Forwarded-Proto
proto = self.headers.get(
    "X-Scheme", self.headers.get("X-Forwarded-Proto", self.protocol))
if proto in ("http", "https"):
    self.protocol = proto
...