HTTP 请求方式:
GET 获取数据
POST 修改数据
PUT 保存数据
DELETE 删除
OPTION 询问服务器的某种支持特性
HEAD 返回报文头
from socket import * from multiprocessing import * HTML_ROOT_DIR = "" def handle_client(client_socket): """处理客户端请求""" # 获取客户端请求数据 request_data = client_socket.recv(1024) print("request data:",request_data) # 构造响应数据 response_start_line="HTTP/1.1 200 Ok\r\n" response_headers = "Server:My server\r\n" response_body = "hello itcast" response = response_start_line+response_headers+"\r\n"+response_body print("response data:",response) # 向客户端返回响应数据 #client_socket.send(bytes(response,"utf-8")) client_socket.send(response.encode("utf-8")) # 关闭客户端连接 client_socket.close() if __name__ == "__main__": server_socket = socket(AF_INET,SOCK_STREAM) server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) server_socket.bind(("",8000)) server_socket.listen(128) while True: client_socket,client_address = server_socket.accept() #print("[%s,%s]用户连接上了" %(client_address[0],client_address[1])) print("[%s,%s]用户连接上了"%client_address) handle_client_process = Process(target = handle_client,args = (client_socket,)) handle_client_process.start() client_socket.close()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>我的网页</title> </head> <body> <h1>HI</h1> <p>welcome</p> </body> </html>
from socket import * from multiprocessing import * import re # 设置静态文件根目录 HTML_ROOT_DIR = "./html" def handle_client(client_socket): """处理客户端请求""" # 获取客户端请求数据 request_data = client_socket.recv(1024) print("request data:",request_data) request_lines = request_data.splitlines() for line in request_lines: print(line) # 解析请求报文 # 'GET / HTTP/1.1' request_start_line = request_lines[0] # 提取用户请求的文件名 file_name = re.match(r"\w+ +(/[^ ]*) ",request_start_line.decode("utf-8")).group(1) if "/" == file_name: file_name = "/index.html" # 打开文件,读取内容 try: file = open(HTML_ROOT_DIR+file_name,"rb") except IOError: response_start_line = "HTTP/1.1 404 Not Found\r\n" response_headers = "Server:My server\r\n" response_body = "The file is not found!" else: file_data = file.read() file.close() # 构造响应数据 response_start_line="HTTP/1.1 200 Ok\r\n" response_headers = "Server:My server\r\n" response_body = file_data.decode("utf-8") response = response_start_line+response_headers+"\r\n"+response_body print("response data:",response) # 向客户端返回响应数据 #client_socket.send(bytes(response,"utf-8")) client_socket.send(response.encode("utf-8")) # 关闭客户端连接 client_socket.close() if __name__ == "__main__": server_socket = socket(AF_INET,SOCK_STREAM) server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) server_socket.bind(("",8000)) server_socket.listen(128) while True: client_socket,client_address = server_socket.accept() #print("[%s,%s]用户连接上了" %(client_address[0],client_address[1])) print("[%s,%s]用户连接上了"%client_address) handle_client_process = Process(target = handle_client,args = (client_socket,)) handle_client_process.start() client_socket.close()