Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29956393
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-02-02 08:29:16

学习BaseHTTPServer 模块:可以实现HTTP服务的哦!
这个模块定义了两个实现 HTTP 服务器 (Web 服务器)。 通常地, 这个模块不被直接使用,但被用来作为构建功能性 Web 服务器的一个基类。 参阅 SimpleHTTPServer and CGIHTTPServer 模块。

第一个类, HTTPServer, 是 SocketServer.TCPServer 的一个子类。它创建并监听HTTP socket, 发送请求到一个处理程序。创建和运行这个服务器的 Code(代码) 像这样:

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

class HTTPServer(server_address, RequestHandlerClass)
    这个类通过存储依照实例的 server_name 和 server_port变量指定的服务器地址构建在 TCPServer 类之上。该服务器通过处理程序可以访问,典型地通过处理程序的 server(服务器) 实例变量。

class BaseHTTPRequestHandler(request, client_address, server)
    这个类被用来处理到达服务器的 HTTP 请求。单独地,它不能响应任意实际的 HTTP 请求,必须是子类来处理每个请求方法 (例如, GET 或 POST)。BaseHTTPRequestHandler 通过子类为使用提供一些类和实例变量以及方法。

    该处理操作程序将解析请求和头,然后调用请求类型的具体方法。该方法名称由请求构建。例如,例如请求方法 "SPAM",do_SPAM() 将不使用任何参数被调用。所有相关的信息被存储在处理程序的实例变量中。子类不需要重载和扩展 __init__() 方法。

BaseHTTPRequestHandler 有下列实例变量:

client_address
    包含关连的客户端地址这样格式(host, port)的一个元组。

command
    包含的命令 (请求类型)。例如,'GET'。

path
    包含的请求路径。

request_version
    包含请求版本的字符串。例如,'HTTP/1.0'。

headers
    控制(Holds)由MessageClass 类变量指定的类的一个实例。这个实例解析和管理 HTTP 请求中的头。

rfile
    包含一个输入流,定位在可选的输入数据开头。

wfile
    包含写到客户端响应的输出流。当写给这个流时坚持使用正确的HTTP协议。

BaseHTTPRequestHandler 有下列类变量:

server_version
    指定服务器软件版本。你可能想要重载它。格式是多个空格分隔的字符串,每个字符串的格式是name[/version]。例如,'BaseHTTP/0.2'。

sys_version
    包含Python系统版本,通过 version_string 方法和 server_version 类变量,以一种方便可用的格式。例如,'Python/1.4'。

error_message_format
    为构建响应到客户端的错误构建一个格式字符串。它使用括号, 关键的格式区分符,因此该格式操作对象必须是一个字典。code 关键字应该是一个整数,指定数字的 HTTP 错误代码值。message 应该是一个包含 (详细的) 发生的错误信息的字符串,explain 应该是错误代码号的解释。缺省 message 和 explain 值可以在 responses 类变量中找到。

protocol_version
    这指定在响应中使用的 HTTP 协议版本。如果设置为 'HTTP/1.1',    服务器将允许 HTTP 持续连接;然而,那么你的服务器必须 在所有它到客户端响应中包含一个正确的Content-Length 头 (使用 send_header())。为了向下的兼容性,缺省设置为 'HTTP/1.0'。

MessageClass
    指定一个类似于rfc822.Message 的类解析 HTTP 头。典型地,不被重载,并且缺省为 mimetools.Message。

responses
    这个变量包含一个错误代码整数到包含一个短的和一个长的信息的两个元素的元组的映射。例如 {code: (shortmessage, longmessage)}。 shortmessage 通常被用作错误响应中 message 关键字,longmessage 用作 explain 关键字 (参阅 error_message_format 类变量)。

BaseHTTPRequestHandler 实例有下列方法:

handle()
    调用 handle_one_request()一次 (或,如果能够持续连接,多次) 处理进来的 HTTP 请求。你从不需要重载它;替代,实现对应的 do_*() 方法。

handle_one_request()
    这个方法将解析和分派请求到对应的 do_*() 方法。你从不需要重载它。

send_error(code[, message])
    发送并记录一个完整的错误回复到客户端。数字的 code 指定 HTTP 错误代码,以 message 作为可选的,更多指定的文本。全套的头被发送,后面紧跟使用 the error_message_format 类变量组成的文本。

send_response(code[, message])
    发送一个响应头并记录已接收的请求。HTTP 响应行被发送,后面紧跟 Server 和 Date 头。这两个头的值分别地从 version_string() 和 date_time_string() 方法中获得。

send_header(keyword, value)
    编写一个指定的 HTTP 头到输出流。 keyword 应该指定头关键字,value 指定它的值。

end_headers()
    发送一个空白行,表示响应中的 HTTP 头结束。

log_request([code[, size]])
    记录一个已接收的 (成功的) 请求。code 指定关联响应的数字的 HTTP 代码。如果响应的大小可用,那么它应该作为 size 参数被传递。

log_error(...)
    当一个请求不能被完成时记录一个错误。缺省,它传递信息给 log_message(),因此它取相同的参数 (format 和 附加值)。

log_message(         format,...)
    记录一个随机信息给 sys.stderr。典型地重载创建自定义的错误日志结构。 format 参数是一个标准的printf风格的格式化字符串,附加参数给 log_message() 用于输出格式。客户端地址和当前的日期时间被作为记录的每个信息的前缀。

version_string()
    返回服务器软件的版本字符串。这是一个 server_version 和 sys_version 类变量的联合。

date_time_string([timestamp])
    返回通过 timestamp 给定的日期和时间(必须是由 time.time()返回的格式),格式化一个信息头。如果 timestamp 被省略,它使用当前的日期和时间。

    结果像 'Sun, 06 Nov 1994 08:49:37 GMT'。2.5 版本中的新特性: timestamp 参数。

log_date_time_string()
    返回当前的日期和时间,格式化日志。

address_string()
    返回客户端地址,格式化日志。一个名称的查找被执行在客户端的IP地址上。

也见:

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

模块 SimpleHTTPServer:
    基本的请求处理程序,限制响应文件实际上在目录的根下面。



注:由于受金融危机的影响,翻译进度略显缓慢,请见谅。


出处,由zkfarmer翻译整理。

强烈推荐:python中国 这个网站!



阅读(1280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~