web服務(wù)器集成解析動態(tài)請求的功能

import socket

import re

import multiprocessing

import time

class WSGTServer(object):

def __init__(self):

# 1、創(chuàng)建套接字

self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 2、綁定

self.tcp_server_socket.bind(("", 7890))# 空代表任何端口都可以

# 3、變?yōu)楸O(jiān)聽套接字(最大鏈接數(shù)128)

self.tcp_server_socket.listen(128)# 調(diào)用listen變?yōu)楸粍?/p>

def service_client(self,new_socket):

# 為這個客戶端返回數(shù)據(jù)

# 1、接收瀏覽器發(fā)送過來的請求

# GET / HTTP/1.1

# ......

request = new_socket.recv(1024).decode("utf-8")

# print('<<<<<' * 20)

# print(request)

request_lines = request.splitlines()

print("")

print(">" * 20)

print(request_lines)

# GET /index.py HTTP/1.1

# get post put del

ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])# *:0個~~多個

file_name = ""

if ret:

file_name = ret.group(1)

print("*" * 50, file_name)

if file_name == '/':

file_name = '/絲芙蘭.html'

# 2、返回HTTP格式的數(shù)據(jù)給瀏覽器

# 2.1 如果請求的資源不是以.py結(jié)尾,那么就認(rèn)為是靜態(tài)資源(html/css/js/png/jpg)

if not file_name.endswith(".py"):

try:

# f = open("../創(chuàng)維官方商場-權(quán)威官網(wǎng) 彩電領(lǐng)導(dǎo)者/charry.html", "rb")

f = open("../sephore" + file_name, "rb")

except:

response = "HTTP/1.1 404 NOT FOUND\r\n"

response += "\r\n"

response += "---FILE NOT FOUND---"

new_socket.send(response.encode("utf-8"))

else:

html_content = f.read()

f.close()

# 2.1準(zhǔn)備發(fā)送給瀏覽器的Header

response = "HTTP/1.1 200 OK\r\n"

response += "\r\n"

# 2.2準(zhǔn)備發(fā)送給瀏覽器的Body

# response += "<h1>hahaha</h1>"

# 將Response Heard 發(fā)送給瀏覽器

new_socket.send(response.encode("utf-8"))

# 將Response Body 發(fā)送給瀏覽器

new_socket.send(html_content)

else: # 2.2 如果是以.py結(jié)尾,就認(rèn)為是動態(tài)資源的請求

header = "HTTP/1.1 200 OK\r\n"

header += "\r\n"

body = "hahaha %s" % time.ctime();

response = header + body

# 發(fā)送response給瀏覽器

new_socket.send(response.encode("utf-8"))

# 關(guān)閉客戶端套接字

new_socket.close()

def run_forever(self):

while True:

# 4、等待新客戶端的連接

new_socket, client_addr = self.tcp_server_socket.accept()

# 5、為這個客戶端服務(wù)

# service_client(new_socket)

p = multiprocessing.Process(target=self.service_client, args=(new_socket,))

p.start()

new_socket.close()

# 6、關(guān)閉監(jiān)聽套接字

self.tcp_server_socket.close()

def main():

# 用來完成整體的控制,創(chuàng)建一個web服務(wù)器對象,調(diào)用run_forever方法運(yùn)行

wsgi_server = WSGTServer()

wsgi_server.run_forever()

if __name__ == '__main__':

main()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容