zoukankan      html  css  js  c++  java
  • 根据 HTTP header 收集客户端相关信息

    【课程】    web2.0程序设计
    【作业要求】  用 tornado 编写一段小程序,根据 HTTP header 收集客户端相关信息:是否手机、操作系统、浏览器等信息*。
    【作业提示】  主要解析 Request header[“User-Agent”] 。该字符串格式可通过 wiki 链接 查 到 ; 通 过 tornado 英 文 网 站 文 档 , 知 道 用 self.request 获 取
            tornado.httputil.HTTPServerRequest 对象实例,该实例有 headers 字典类型的属性。
    【参考文档】  User-Agent定义及字符串格式(wiki)      tornado 英 文 网 站 文 档       常见的相关字符串和代表的版本信息

    【实验环境】  操作系统:Ubantu 13.10   浏览器:firefox  python:2.7.5+  tornado:1.2.1版本

    1.根据tonardo英文网站文档,了解到用self.request可以获取到客户端的相关信息。在这里,我先将request的比较重要的一些属性列出来,并作诠释

    method
     HTTP 的请求方法:GET或POST

    uri
     被请求的uri, 统一资源标识符,用来唯一的标识一个资源(关于uri)

    path
     uri的路径部分

    query
     uri的请求部分

    version
    HTTP协议的版本,如“HTTP/1.1”

    headers
    这是一个字典类型的属性,带有许多丰富的信息,HTTP headers是 HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。

    接下来我们来一起看下这里面有哪些信息:
     'Accept-Language': 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3',   //表示浏览器默认的语言设置,q表示优先级,q值越大等级越高
    'Accept-Encoding': 'gzip, deflate',            //表示浏览器支持的的压缩方式
    'Connection': 'keep-alive',               //表示浏览器和主机一直保持连接
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',//表示浏览器支持的MIME类型
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0',//浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息
    'Host': 'localhost:8000',  //主机名
    'Cookie': 'user=ZmZm|1417654344|5de24afe2a1e8c302f29211dfd4a726186bdc9af',//客户端存储的少量用户信息
    'Cache-Control': 'max-age=0'//响应缓存的有效秒速

    headers['User-Agent']
    浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息 

    常见的相关字符串和代表的版本信息 

    body
     请求内容的主体,如果存在,是一个string类型。

    remote_ip
     一个表示客户端IP地址的字符串。

    protocol
     程序所遵守的协议

    host
     被请求的主机名

    arguments
    用来存储表示GET/POST的参数字典

    files
     上传的文件

    connection
     单个连接可以连接多个请求,通过该属性可以访问HTTP的请求

    2.以下是我的这个小程序的核心代码(命名为t1.py):

    #coding:utf-8  
    import tornado.httpserver
    import tornado.ioloop
    import tornado.options
    import tornado.web
    from tornado.httpclient import AsyncHTTPClient  
    
    from tornado.options import define, options
    define("port", default=8000, help="run on the given port", type=int)
    
    
    class IndexHandler(tornado.web.RequestHandler):
         def get(self):
            print "**************NOW let me show you something about HTTPServerRequest**********"
            print "#method#:"      
            print self.request.method
            print "#uri#:"
            print self.request.uri
            print "#path#:"
            print self.request.path
            print "#query#:"
            print self.request.query
            print "#version#:"
            print self.request.version
            print "#headers#:"
            print self.request.headers
            print "#headers['User-Agent']#:"
            print self.request.headers['User-Agent']
            print "#body#:"
            print self.request.body
            print "#remote_ip#:"
            print self.request.remote_ip
            print "#protocol#:"
            print self.request.protocol
            print "#host#:"
            print self.request.host
            print "#arguments#:"
            print self.request.arguments
            print "#files#:"
            print self.request.files
            print "#connection#:"
            print self.request.connection
    
    
    if __name__ == "__main__":
        tornado.options.parse_command_line()
        application = tornado.web.Application(
            handlers = [(r"/", IndexHandler)])
        HTTP_SERVER = tornado.httpserver.HTTPServer(application)
        HTTP_SERVER.listen(options.port)
        tornado.ioloop.IOLoop.instance().start()

    打开终端,输入以下命令行:

    ~$ python t1.py

    打开浏览器 并打开链接:localhost:8000

    这时候可以在终端看见以下输出

     从headers['User-Agent']可看出, 我的实验中,

    操作系统是linux,浏览器是firefox,版本是29.0   其中Gecko 是 Firefox 的呈现引擎,版本是20100101

  • 相关阅读:
    c++父类指针子类指针转化分析
    setbuf手册
    c++细节
    cf727e
    总结
    UVa 10192 Vacation (最长公共子序列)
    HUNNU 11313 最长公共子序列(LCS)
    HDU 2069 Coin Change (经典DP)
    UVa 674 Coin Change (经典DP)
    UVa 10131 Is Bigger Smarter? (LDS+数据结构排序)
  • 原文地址:https://www.cnblogs.com/zengyh-1900/p/4195464.html
Copyright © 2011-2022 走看看