• Python 标准库 BaseHTTPServer 中文翻译


    Python 标准库 BaseHTTPServer 中文翻译。


    注意: BaseHTTPServer模块在Python3中已被合并到http.server,当转换你的资源为 Python3 时 2to3 工具将自己主动适配导入。

    源代码:Lib/BaseHTTPServer.py

    此模块定义了两个类用于实现HTTP服务器(Web servers)。通常,此模块不被直接使用。可是它用来作为基类创建功能性的Web servers。

    查看 SimpleHTTPServerCGIHTTPServer 模块。

    第一个类。HTTPServer,是一个 SocketServer.TCPServer 的子类。因此实现 SocketServer.BaseServer 的接口,它创建和监听 HTTP socket。分配请求和处理,创建和执行server的代码看起来是这种:

    def run(server_class=BaseHTTPServer.HTTPServer,
            handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
        server_address = ('', 8000)
        httpd = server_class(server_address, handler_class)
        httpd.serve_forever()

    Class BaseHTTPServer.HTTPServer(server_address, RequestHandlerClass)

    此类建立在 TCPServer 上通过储存服务器地址作为实例变量名为 server_nameserver_port
    服务器可经由处理者进入。典型的是通过处理者的 server 实例变量。

    class BaseHTTPServer.BaseHTTPRequestHandler(request, client_address, server)

    这个类用来处理到达服务器的 HTTP 请求,通过它自身,它不能响应不论什么实际的 HTTP 请求。

    它必须子类化来处理每个请求方法(比如:GET 或 POST)。

    BaseHTTPRequestHandler 提供一个若干类和实例变量。和能够通过子类使用的方法。

    处理者将解析请求和头信息,然后调用一个请求类型的特定方法。

    方法名从请求构造。

    样例中,对于请求方法 SPAMdo_SPAM() 方法将会无參数调用。

    全部相关的信息被储存进处理者的实例变量。子类应该不须要覆写或者扩展 __init__ 方法。


    BaseHTTPServerHandler 有下列实例变量:

    client_address

    包括一个关于client地址的结构为 (host, port) 的元祖。

    server

    包括server实例

    command

    包括命令(请求类型),样例:'GET'

    path

    包括请求路径

    request_version

    包括请求的HTTP版本号的字符串,样例:'HTTP/1.0'

    headers

    拥有一个通过 MessageClass 变量指定的类实例。

    这个实例解析和管理 HTTP 请求的头信息。

    rfile

    包括一个输入流 stream,放置在输入数据选项的開始。

    wfile

    包括输出流用于回复一个响应response给clientclient。当写入这些stream时必须使用适当的HTTP协议。


    BaseHTTPRequestHandler 有下列类变量:

    server_vesion

    指定服务器版本号。你或许会覆写它。he format is multiple whitespace-separated strings, where each string is of the form name[/version],样例:'BaseHTTP/0.2'

    sys_version

    包括Python版本号,通过 version_string 方法和 server_version 类变量使用。

    样例:'Python/1.4'

    error_message_format

    指定一个格式化字符串用于创建一个错误响应给client。

    它使用弧括号。键格式指定,所以格式操作数必须是一个字典。

    code key 应该是一个整数。指定HTTP错误码值。message 应该是一个字符串包括一个错误信息的细节,explain 应该是一个错误码数字的解释。缺省 messageexplain 的值能在 responses 类变量中被找到。

    error_content_type

    指定错误响应的 Content-Type HTTP 头发送给client,缺省值是 'text/html'

    2.6新增,在曾经,内容类型总是 'text/html'

    protocol_version

    这个指定的HTTP协议版本号用于响应,假设设置 'HTTP/1.1'。服务器会执行HTTP硬连接;不管怎样,你的服务器必须包括一个精确的 Content-Length 头(使用 send_header())在全部它响应的client中。

    为了向后兼容,默认设置为 'HTTP/1.0'

    MessageClass

    指定一个 rfc822.Message-like 类来解析HTTP头。典型的,这不用覆写,缺省设置 mimetools.Message

    responses

    此变量包括一个错误码数字和一个包括短和长信息的2元祖的映射,样例: {code:(shrotmessage, longmessage)}

    shortmessage 通经常使用于一个错误响应中的 message key,longmessage用来解释(查看 error_message_format 类变量)。


    一个 BaseHTTPRequestHandler 实例有下面方法:

    handle()

    召唤一次 handle_one_request() (或者。假设硬连接是启用的,多次召唤)来响应来到的HTTP请求。你应该永远不须要覆写它;反而。实现适当的 do_* 方法。

    handle_one_request()

    这种方法将解析和分配请求给适配的 do_* 方法,你应该不须要覆写它。

    send_error(code[, message])

    发送和记录一个完整的错误回复给client。

    code 指定HTTP错误码,message 是可选的, 很多其它特定文本。

    一个完整的头设置被发送。随后使用 error_message_format 类变量排版文本。

    send_response(code[,message])

    发送一个响应头和记录接受的请求,HTTP响应行被发送,然后是 ServerData 头,这两个头的值分别从 version_stringdare_time_string 方法拾起。

    send_header(keyword, value)

    向输出流写入一个指定的HTTP头,ketword 应该指定头关键字,value 指定它的值。

    end_headers()

    发送一个空白行,表面HTTP头响应结束。

    log_request([code[,size]])

    记录和接受(成功的)请求,code 应该指定为 HTTP code 和响应通讯,假设响应大小是有效的。应该作为 size 參数。

    log_error(…)

    当一个请求不能被履行记录一个错误,缺省, 它把信息传给 log_message(),所以它获得相同的參数(格式的和附加的值)。

    log_message(format, …)

    记录一个随意的信息给 sys.tederr。这是典型的覆写来创建定制错误信息的原理。format參数是一个标准的 printf-style 格式化字符串,在其它參数 log_message() 被用作输入的格式。clientip地址和当前日期和时间作为每个信息记录(message logged)的前缀。

    version_string()

    返回服务器软件版本号。这是一个 server_versionsys_version 类变量的组合。

    date_time_string([timestamp])

    返回由 timestramp 给予的日期和时间(这些必须通过 time.time() 格式返回),通过一个信息头来格式化,假设 timestamp 被省略。它将使用当前的日期和时间。

    结果看上去像 'Sun, 06 Nov 1994 08:49:37 GMT'

    2.5新增 timestamp 參数。

    log_date_time_string()

    返回当前日期和时间。logging格式。

    address_string()

    返回client地址。logging格式。在clientIP地址执行一个名字查找。


    很多其它样例

    创建一个不用一直循环执行的服务器,直到某些条件被满足。

    def run_while_true(server_class=BaseHTTPServer.HTTPServer,
                       handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
        """
        This assumes that keep_running() is a function of no arguments which
        is tested initially and after each request.  If its return value
        is true, the server continues.
        """
        server_address = ('', 8000)
        httpd = server_class(server_address, handler_class)
        while keep_running():
            httpd.handle_request()


    附加:

    模块: CGIHTTPServer
    支持CGI脚本的扩展请求处理。

    模块: SimpleHTTPServer
    实际上根文档(document root)下限制响应到文件的基础请求处理。

  • 相关阅读:
    教你不编程快速解析 JSON 数据
    教你在 Linux 下时光穿梭
    在Linux系统中使用Vim读写远程文件
    【高并发】如何实现亿级流量下的分布式限流?这些理论你必须掌握!!
    【高并发】高并发环境下构建缓存服务需要注意哪些问题?我和阿里P9聊了很久!
    【高并发】关于线程池,蚂蚁金服面试官问了我这些内容!!
    【高并发】关于乐观锁和悲观锁,蚂蚁金服面试官问了我这几个问题!!
    机器学习 | 简介推荐场景中的协同过滤算法,以及SVD的使用
    Python | Python初学者的自我修养,找到自己的方向
    LeetCode 86 | 链表基础,一次遍历处理链表中所有符合条件的元素
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7259244.html
Copyright © 2020-2023  润新知