用Python实现简单的Web Server

Refer: https://www.afternerd.com/blog/python-http-server/

Web Server的概念

用Python实现Web Server

Python 2中SimpleHTTPServer模块被合并到Python 3的http.server模块。它支持目录浏览,指定端口,指定绑定地址等。

  1. 方法一:直接在命令行调用http.server模块
    python -m http.server 8080 --bind 127.0.0.1

    8080: Web服务器端口号, --bind 参数指定只能本地访问

  2. 使用脚本实现,假定脚本名字为pyWebServer.py,内容如下。
import http.server
import socketserver

PORT = 8081

Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

完整版:

import http.server
import socketserver
import argparse
import ipaddress
import sys
import os

VERSION = 1.0
PORT = 8081
IP = "0.0.0.0"


def start_web_server(ip, port, root):
    Handler = http.server.SimpleHTTPRequestHandler
    print("pyWebServer v{}".format(VERSION), " by HanselSoft")
    print("starting web server at {}:{}, root dir={}".format(ip, port, root))

    try:
        os.chdir(root)
        with socketserver.TCPServer((ip, port), Handler) as httpd:
            httpd.serve_forever()
    except Exception as e:
        print("Error: ", e)
        sys.exit(-2)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--port', '-p', type=int,
                        help='server port number, default is {}'.format(PORT),
                        default=PORT)
    parser.add_argument('--ip', '-i', 
                        help='bind to address, default is {}'.format(IP),
                        default=IP)
    parser.add_argument('--dir', '-d',
                        help='web server root directory, default is current \
                        directory', default=os.getcwd())
    args = parser.parse_args()
    try:
        ipaddress.ip_address(args.ip)
    except ValueError:
        print("Error: incorrect IP: ", args.ip)
        sys.exit(-1)

    if not os.path.isdir(args.dir):
        print("Error: directory '{}' is not existed.".format(args.dir))
        sys.exit(-1)

    start_web_server(args.ip, args.port, args.dir)

if __name__ == '__main__':
    try:
        main()
    except (KeyboardInterrupt, SystemExit):
        sys.exit(0)

在一个目录下运行后,自动以该目录为Web的根目录。

 

编译成单个.exe文件

  1. 安装pyinstaller:  pip install pyinstaller
  2. 运行命令:  pyinstaller -F -c pyWebServer.py
  3. 在dist目录下可以找到单个exe文件:pyWebServer.exe,大小大概为6MB,非常小巧

进阶

可以自定义一个Handler取代SimpleHTTPRequestHandler实现更复杂的功能。

请到我的下载资源里直接下载打包好的exe文件:https://download.csdn.net/download/hansel/11156550

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值