Tornado依据header收集用户信息

Python四大Web框架对比:Django、Flask、FastAPI与Tornado Web框架是现代Web开发的核心工具,Python生态中的Django、Flask、FastAPI和Tornado各具特色。Django以'包含电池'理念著称,适合快速构建企业级应用;Flask作为微框架,提供极致灵活性;FastAPI凭借异步支持和自动文档生成成为API开发新宠;Tornado则是高并发实时应用的首选。理解这些框架的设计哲学和性能特点,对于技术选型至关重要。在实际项目中,框架性能、开发效率和团队适配度是需要权衡的关键因素。通过基准测试可见,FastAPI在请求处理速度上表现突出,而Djan 阅读详情

最近学习了用 tornado 编写一段小程序,根据 HTTP header 收集客户端相关信息:是否手机、操作系统、浏览器等信息。

先上代码,简单实用:

import tornado.ioloop
import tornado.httpserver
import tornado.options
import tornado.web

class IndexHandle(tornado.web.RequestHandler):
    def get(self):
    	self.write("-------method:\n")
        self.write(self.request.method)
        self.write("\n-------uri:\n")
        self.write(self.request.uri)
        self.write("\n-------path:\n")
        self.write(self.request.path)
        self.write("\n-------query:\n")
        self.write(self.request.query)
        self.write("\n-------version:\n")
        self.write(self.request.version)
        self.write("\n-------headers:\n")
        self.write(self.request.headers)
        self.write("\n-------body:\n")
        self.write(self.request.body)
        self.write("\n-------remote_ip:\n")
        self.write(self.request.remote_ip)
        self.write("\n-------protocol:\n")
        self.write(self.request.protocol)
        self.write("\n-------host:\n")
        self.write(self.request.host)
        self.write("\n-------arguments:\n")
        self.write(self.request.arguments)
        self.write("\n-------query_arguments:\n")
        self.write(self.request.query_arguments)
        self.write("\n-------body_arguments:\n")
        self.write(self.request.body_arguments)
        self.write("\n-------files:\n")
        self.write(self.request.files)
        self.write("\n-------cookies:\n")
        self.write(self.request.cookies)
        self.write("\n")

if __name__ == "__main__":
    tornado.options.parse_command_line()
    __app__=tornado.web.Application(handlers=[(r'/', IndexHandle)], debug=True)
    __http_server__=tornado.httpserver.HTTPServer(__app__)
    __http_server__.listen(8000)
    tornado.ioloop.IOLoop.instance().start()

可以看见通过调用self.request获取了tornado.httputil.HTTPServerRequest 对象实例,实例里有headers(信息最丰富的)字典类型的属性,客户的信息就在里面!

以下是我浏览器端的显示结果:


让我们来看一下headers里的信息:
1."Accept-Language": "zh-CN,zh;q=0.8"
     Accept-Language可以说明用户的默认语言设置,它可以通过逗号分隔携带多国语言。第一个是首选的语言,其他语言会携带一个"q"值,来表示用户对这个语言的喜好程度(0-1)。在这里,"zh-CN,zh"是我默认的语言设置,zh-CN是简体中文,zh是中文,优先支持简体中文。"q=0.8"表示我对此语言的喜欢程度很高。
2."Accept-Encoding": "gzip,deflate,sdch"
     大部分现代浏览器会把浏览器所支持的压缩格式(gzip)报告给服务器,这时浏览器就会把压缩过的HTML发送给浏览器,减少文件大小,以节省下载时间和宽带。
3."Connection": "keep-alive"
     表明服务器是有状态服务器(stateful server),什么是有状态服务器呢?简单的理解就是服务器会保留与客户端的连接,不用在每次打开新窗口时都创建连接,同时客户的记录会被保留。比方说你在淘宝买了一件物品放进了购物车,任你怎么切换窗口查看其它物品购物车内都保留了你的物品。而相反,对于无状态服务器(stateless server),用户的行踪服务器都不知道,甚至连用户是否登陆了也不知道,这就需要利用我们常见的Cookie和Session来记录用户状态,用户的每个请求都需要带上自己的Cookie和Session。
4."Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
     浏览器支持的MIME类型分别是text/html、application/xhtml+xml、application/xml和*/*,优先顺序从左到右排序。MIME(Multipurpose Internet Mail Extensions)多功能Internet邮件扩充服务,是一种多用途网际邮件扩充协议。text/html、application/xhtml+xml、application/xml都是MIME类型,斜杠前面是type(类型),斜杠后面是subject(子类型)。前者范围较大,后者范围更明确,即大类中的小类。text/html表示html文档,application/xhtml+xml表示xhtml文档,application/xml表示xml文档。
5."User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER"
    这么多信息简直了!恐怕这是最好用的信息了。User-Agent可以携带浏览器名和版本号、操作系统名和版本号以及默认语言。详细的介绍请参读这里
6."Host": "localhost:8000"
     服务器主机(网站的IP)
7."Cache-Control": "max-age=0"
     "max-age"表明了响应被缓存的有效秒数。允许你的网站被缓存将大大减少下载的时间和宽带,也能提高浏览器的载入速度。
8."If-None-Match": "\"647237d1c3f1f1f586f1e042ec090b9071d0ed46\"
     服务器在response中添加ETag信息(就是那一大串数字),当用户再次请求该资源时,将在request中加入ETag。如果服务器验证请求的ETag没有改变(资源没有更新),将返回一个304状态告诉用户使用本地缓存文件。否则返回200状态和新的资源和ETag。

参考文档:http://www.tornadoweb.org/en/stable/httputil.html#tornado.httputil.HTTPHeaders.get_list
Apollo 9.0 参考线生成器 -- ReferenceLineProvider 在基于参考线的规划算法中,参考线是Planning一切工作的基础和前提,所以搞清楚参考线怎么来的就变得很重要。为此,首先需要了解Planning 与 Routing的交互,通过交互得到路径片段,这些路径片段就告诉我们该怎么走,再在此基础上生成参考线,最后使用不同的平滑算法对参考线进行平滑,得到一条光滑的参考线。 阅读详情

相关推荐

ICDAR数据集简介

ICDAR(文档分析与识别国际会议)是OCR领域的权威会议,每两年发布一次数据集,专注于‌自然场景文本检测与识别‌,涵盖多语言、复杂版式和真实环境挑战。街景、广告牌、票据、手写文档等真实场景图像。包含水平、垂直、倾斜、弯曲文本,背景干扰大,部分文本存在遮挡或模糊。提供文本位置坐标(矩形/四边形框)及内容,无法识别的文本标记为###。以上总结提炼了ICDAR的核心价值与应用方法论。给出最佳实践方法是官网数据预训练模型 + 业务数据微调(比如用PPOCRLabel标注100+张业务图)。

xinghaitao2005的博客 1117

Tornado——Request 详解

首先推荐一本简单易学的入门书: http://demo.pythoner.com/itt2zh/index.html 1. Tornado的Request对象属性 属性 说明 self.request.method http的请求头;get, post等 self.reuqest.uri 客户端请求完整的uri self.request.path uri的路径名,不包含查询的字符串 self.request.query...

cocos2dGirl的专栏 709

ANSYS APDL学习(6):ANSYS APDL部分命令流介绍

介绍APDL 部分命令流

娱乐至上的博客 1万+

tornado 中读取访问参数(get和post方式)

tornado 中读取访问参数 1、get方式 arg = self.get_query_argument(‘keyword’,’’) 获取get请求方式的keyword对应的值,如果不存在,则为空字符串 args = self.get_query_arguments(‘keyword’) 返回一个列表,获取get请求方式的keyword对应的一组值,如果不存在,则为空列表 imp...

梁甜田的博客 1万+

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1292

2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导

将(1)式代入(6)式,就有。

wmorries的博客 475

tornado获取get,post,地址栏,headers中的信息

# tornado读取客户端提交的访问参数演示 #获取参数用 arg=self.get_query_argumnet() -----get方式 #args=self.get_query_arguments() -----get方式 #异常,不传递参数时的处理 #post方式获取参数 ''' 前端方式提交post的时候,会以name的值的属性为键,input中的值为值传递给后台 真正的...

qq_35810838的博客 6795

Full Range && Limit Range

Full Range && Limit Range1 Full range和Limit Range定义2 为什么会需要Limit Range3 用Full range去显示limit Range图片4 YUV转RGB5 额外 1 Full range和Limit Range定义 我们知道,对于RGB和YUV的色彩空间来说,有个位深(bit-depth)的概念;位深是指记录图像每个像素的色彩通道时所使用的bit数,常见的RGB888,YUV420-8bit。以RGB888为例,其代表R G B

zjhcj1的博客 1万+

Tornado之请求与响应头

Tornado之请求与响应头 import tornado.ioloop import tornado.httpserver import tornado.web import tornado.options import json import time from tornado.options import options,define define("port",default=80...

可爱的我可爱的code 1688

uniapp:实现圆盘/色盘取色器组件,圆环颜色选择器用户可拖拽选择颜色值实时更新用户选择的颜色数据,拖动丝滑流畅不卡顿(uniapp小程序/手机h5网页/安卓苹果app/nvue都能使用,详细源码)

uniapp项目中使用颜色选择器,uniapp实现简单圆形色盘、取色器、拾色器组件,Uniapp自定义颜色选择器取色器,圆形的颜色选择器,uniapp颜色拾取器,拾色器 取色器 颜色选择器,uniapp vue3圆形的色盘取色,uni-app如何封装一个取色器组件,用uniapp写调色板,uniapp颜色选择器插件,实现圆环颜色选择器,Uni-app在App端使用颜色选择器,uniapp微信小程序圆盘颜色选择,uniapp H5网页实现圆形的取色器,使用canvas实现的简单圆形色盘,可自定义相关大小,un

✅ 精选推荐文章 4534

ZYNQ系列PS侧和PL侧DDR3或DDR4在AD(Altium Designer 25)中的layout布线规则约束

DDR3或DDR4的PCB布线规则通常有相对固定的要求,对应的,在PCB设计时有固定的约束设置。

FPGA艺术家的博客 787

Tornado设置http的响应头header

在tornado中设置http请求的响应头:self.set_header("Content-Type","text/html");告诉浏览器以html文件的形式解析此响应的bodyajax请求,设置rest的api响应头:self.set_header("Content-Type","application/json");ajax请求以json数据类型解析此响应的body

甲鱼大哥的专栏 9625

腾讯微搭低代码开发实战电子书:医疗挂号小程序

本书通过一个完整的“医疗挂号小程序”项目,深度讲解腾讯微搭(WeDa)低代码平台在复杂业务场景下的实战应用。从登录体系搭建、用户注册,到就诊人管理、科室排班与预约下单,全程遵循“配置+逻辑+实战”的思路,带领读者从零实现具备商业级可用性的医疗挂号小程序,掌握低代码开发的核心技巧与业务落地能力。

低代码布道师的博客 952

Python学习之路-Tornado基础:深入Tornado

下面几节主要讲解tornado.web.RequestHandler。回想一下,利用HTTP协议向服务器传参有几种途径?查询字符串(query string),形如key1=value1&key2=value2;请求体(body)中发送的数据,比如表单数据、json、xml;提取uri的特定部分,如/blogs/2016/09/0001,可以在服务器端的路由中用正则表达式截取;在http报文的头(header)中增加自定义字段,如X-XSRFToken=itcast。

geobuins的博客 1836

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

tornado

文档 main.py import tornado.web import tornado.ioloop from tornado.options import define, options, parse_command_line # define, options, parse_command_line 三个配合使用解析命令行 # 定义默认参数 这里定义默认启动端口,可通过命令行启动时修改port的值,改变端口 define('port', default=8080, type=int) .

Waller_的博客 1412

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

tornado模板注入

tornado模板注入漏洞

羽的博客 3030

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

根据 HTTP header 收集客户端相关信息

【课程】    web2.0程序设计 【作业要求】  用 tornado 编写一段小程序,根据 HTTP header 收集客户端相关信息:是否手机、操作系统、浏览器等信息*。 【作业提示】  主要解析 Request header[“User-Agent”] 。该字符串格式可通过 wiki 链接 查 到 ; 通 过 tornado 英 文 网 站 文 档 , 知 道 用 self.reque...

weixin_33978044的博客 322

Django、Flask、Tornado框架选型实战指南

Web框架是构建服务端应用的核心基础设施,其本质是HTTP请求处理、路由分发、中间件编排与异步IO调度的技术载体。理解Django的全栈约定、Flask的显式可拆卸设计和Tornado的单线程事件循环原理,有助于规避N+1查询、上下文丢失、连接池耗尽等高频工程陷阱。三者技术价值迥异:Django胜在开箱即用的生产就绪能力,Flask强于轻量嵌入与微服务解耦,Tornado专精高并发长连接场景。典型应用场景包括内部管理系统(Django admin)、边缘设备API(Flask单文件部署)、实时协作服务(To

weixin_33901926的博客 366

第三节:Tornado的请求与响应

上节知识点回顾 一、请求与响应 1.1 浏览器与服务器的沟通过程 1.2 请求信息 请求    浏览器在发送请求的时候,会发送具体的请求信息,由请求行,请求消息头,请求正文 请求消息头    向服务器传递附加信息 消息头 含义 Accept 浏览器可以接受的MIME类型 ...

可爱程序员 5192

Tornado基本使用

文章目录Tornado的安装Tornado基本使用Tornado各种url写法配置settings & 获取get,post请求Tornado渲染Tornado多文件上传 Tornado的安装 1、pip3安装   pip3 install tornado 2、源码安装         https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz Tornado基本使用 import tornado.ioloop imp

小宝儿的学习之路 782

关于解决tornado 跨域问题总结

什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。 一般出现跨域会出现有以下几种情况: 域名不同:如www.aaa.com/a.html 与www.bbb.com/a.html 同域名,端口不同: 如www.aaa.com:8080/a.html 与www.aaa.com:8081/a.html 子域名不同:test.aaa.com/a.html 与test1.aaa.com/a.html 协议不同:如 https 和http 特殊的:loc

一只梦想当全栈工程师的程序猿 3830

python 网络编程学习 smtp/tornado

python smtp

hexiaodouaipiqiu的博客 1140

Tornado-操作演示-2

tornado服务器若干方法的调用次序演示 # tornado服务器若干方法的调用次序演示 import tornado from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from tornado.options import define, options, parse_conf...

170

数据科学家必学:用Tornado+OpenAPI自动生成API文档

API文档是服务接口的标准化契约,其本质是定义请求方法、参数结构、响应格式与错误码的机器可读规范。遵循OpenAPI 3.0规范可实现多内容类型声明、精细化错误建模和组件复用,显著提升前后端协作效率。结合Tornado异步框架,能兼顾模型推理性能与文档实时性,避免Flask同步阻塞或FastAPI强类型绑定带来的工程负担。本文聚焦轻量级落地实践,通过代码注释驱动方式,将Swagger UI交互式文档深度集成至Python数据服务中,让数据科学家真正掌握‘写模型即写契约’的生产化能力。

weixin_34241036的博客 310

Python3 --- Tornado之Response

一、返回Json数据 import tornado.web import tornado.ioloop import tornado.httpserver import tornado.options # 新导入的options模块 class IndexHandler(tornado.web.RequestHandler): """主路由处理类""" def get(sel...

__静禅__ 4078

Tornado初识

Tornado初识 一、Tornado介绍 Tornado是Python 编写的一个强大的可扩展的Web服务器,在处理高网络流量的时候表现的足够强大,但是在创建的时候,和Flask类似又足够轻量,并且可以被用到大量的工具当中。相对于其他的框架,Tornado有如下特点: 1、完整的Web开发框架,和Django,Flask一样,Tornado也提供了路由映射,request上下文,基于模板的页面渲染这些功能 2、同样是一个高效的网络库,性能可以和Python 的Twisted,Gevent等底层框架媲美,同

markshui的博客 260
上一篇: 初识tornado.web.RequestHandler
下一篇: Tornado"debug=True"动态编译
Simba_Scorpio
博客等级 码龄13年 53粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值