Retrieve browser headers in Python

前端 未结 2 1928
时光取名叫无心
时光取名叫无心 2021-02-05 17:57

I\'m currently drawing a blank as how to get the current browser header information for a user in Python Tornado? For example, in PHP you\'d simple view the $_SERVER data. What

相关标签:
2条回答
  • 2021-02-05 18:46

    Here's a snippet based off of a server I have where we retrieve some header data from the request:

    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)
    
    0 讨论(0)
  • 2021-02-05 18:53

    You can use logic similar to tornado/httpserver.py or just create tornado.httpserver.HTTPServer() with 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
    
    0 讨论(0)
提交回复
热议问题