Python模拟简单的Web服务器 &1

代码 #

# coding=utf-8
import BaseHTTPServer


class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    """
    处理请求并返回页面
    """

    # 页面模板

    Page = '''\
        <html>
        <body>
        <p>Hello World</p>
        </body>
        </html>
    '''

    # 处理一个GET请求

    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-Type", "text/html")
        self.send_header("Content-Length", str(len(self.Page)))
        self.end_headers()
        self.wfile.write(self.Page)


# -------------------------------

if __name__ == '__main__':
    serverAddress = ('', 8080)
    server = BaseHTTPServer.HTTPServer(serverAddress, RequestHandler)
    server.serve_forever()

说明 #

基本概念:#

  1. 等待某个人连接服务器并向我们发送一个HTTP请求
  2. 解析该请求
  3. 了解该请求的希望请求的内容
  4. 服务器根据请求抓取需要的数据(从服务器本地文件中读 或者 程序动态生成)
  5. 将数据格式化为请求需要的格式
  6. 送回HTTP响应

1、2 、6的操作对所有web应用都是一样的,这部分内容python标准库中的BaseHTTPServer模块可以帮助我们处理,我们只需要关注步骤3-5

模块的BaseHTTPResponseHandler类会帮助我们处理对请求的解析,并通过确定请求的方式来调用其对应的函数,比如方法是GET,该类就会调用名为do_GET的方法。
RequestHandler继承了BaseHTTPRequestHandler并重写了do_GET方法,其效果如代码所示是返回Page的内容。Content-Type告诉了客户端要以处理 html 文件的方式
处理返回的内容。end_headers 方法会插入一个空白行

运行 $ python server.py,在浏览器可以查看 127.0.0.1:8080 会输出:Hello World,console 输出如下:

hufeis-MacBook-Pro:web-server hufei$ python server.py
127.0.0.1 - - [27/Oct/2016 15:47:01] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Oct/2016 15:47:02] "GET /favicon.ico HTTP/1.1" 200 -

PS:可以使用 httpie 显示响应报文的全部内容(http 127.0.0.1:8080)也可以使用 Paw
GET / HTTP/1.1
Host: 127.0.0.1:8080
Connection: close
User-Agent: Paw/2.1 (Macintosh; OS X/10.12.1) GCDHTTPRequest

显示响应报文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值