python实现web服务器_Python实现静态web服务器

一、什么是Web服务器

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache Nginx IIS。今天我们用Python来实现一个简单的静态Web服务器。

二、代码实现

from socket import *

from multiprocessing import Process

# 声明一个WebServe的类

class WebServer(object):

"""构造方法"""

def __init__(self, port=8000, max_listen=128):

# 1. 创建套接字

self.tcp_server = socket(AF_INET, SOCK_STREAM)

# 2. 绑定IP和端口

self.tcp_server.bind(("", port))

# 3. 把主动变成被动

self.tcp_server.listen(max_listen)

def request(self, new_socket):

# 5.接收数据

request_data = new_socket.recv(1024)

# 5.1 判断有没有数据

if not request_data:

new_socket.close()

return

print(request_data)

# 6.打印

# 6.1 先把得到数据按行分割成列表

request_lines = request_data.splitlines()

# 6.2 请求行 GET /1.html HTTP/1.1

request_start_line = request_lines[0].decode("utf-8")

# 6.3 取文件名

file_name = request_start_line.split(" ")[1]

# 6.3.1 判断文件名是不是 /

if file_name == "/":

file_name = "/index.html"

# 6.4 拼接上网站根目录常量

file_name = WEB_ROOT + file_name

print(file_name)

try:

# 6.5 打开文件

with open(file_name, "rb") as f:

# 文件内空

html = f.read()

except:

# 7. 返回

# 响应行

response_start_line = b"HTTP/1.1 404 Not found\r\n"

# 响应头

response_headers = b"Content-Type: text/html;charset=UTF-8\r\n"

response_headers += b"Server: YMSD\r\n\r\n"

# 响应体

response_body = "当前网页找不到".encode("utf-8")

#

response_data = response_start_line + response_headers + response_body

new_socket.send(response_data)

else:

# 7. 返回

# 响应行

response_start_line = b"HTTP/1.1 200 OK\r\n"

# 响应头

response_headers = b"Server: YMSD\r\n\r\n"

# 响应体

response_body = html

#

response_data = response_start_line + response_headers + response_body

new_socket.send(response_data)

# 关闭套接字

new_socket.close()

def start(self):

while True:

# 4.等待连接,并创建新的逃接字

new_socket, client_info = self.tcp_server.accept()

# 创建一个进程

p = Process(target=self.request, args=(new_socket,))

# 启动进程

p.start()

# request(new_socket)

# TODO:sad

# 多进程必需关闭new_socket

new_socket.close()

# 声明一个常量用来放网站的根目录

WEB_ROOT = "html"

def main():

# 创建Web对象

web = WebServer(8080)

# 调用对象start方法

web.start()

if __name__ == '__main__':

main()

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值