python3 -m http.server
python3 -m http.server
python3 -m http.server 8888
返回固定的页面
import socket
def handle_client_request(n_socket, client_ip_port):
buf = n_socket.recv(4096)
if buf:
print(buf.decode())
response_line = 'HTTP/1.1 200 OK\r\n'
response_header = 'Server:PY\r\nName:py42\r\n'
f = open('static/index.html', 'rb')
data = f.read()
f.close()
response = (response_line + response_header + '\r\n').encode() + data
n_socket.send(response)
n_socket.close()
else:
print(f'{client_ip_port} 下线了')
if __name__ == '__main__':
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
server_socket.bind(('', 8989))
server_socket.listen(128)
while True:
new_socket, ip_port = server_socket.accept()
print(f'{ip_port}连接了')
handle_client_request(new_socket, ip_port)
返回指定页面
import socket
def handle_client_request(n_socket, client_ip_port):
buf = n_socket.recv(4096)
if buf:
print(buf.decode())
buf = buf.decode()
file_name = buf.split(' ')[1]
if file_name == '/':
file_name = '/index.html'
print(file_name)
response_line = 'HTTP/1.1 200 OK\r\n'
response_header = 'Server:PY\r\nName:py42\r\n'
f = open('static' + file_name, 'rb')
data = f.read()
f.close()
response = (response_line + response_header + '\r\n').encode() + data
n_socket.send(response)
n_socket.close()
else:
print(f'{client_ip_port} 下线了')
if __name__ == '__main__':
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
server_socket.bind(('', 8989))
server_socket.listen(128)
while True:
new_socket, ip_port = server_socket.accept()
print(f'{ip_port}连接了')
handle_client_request(new_socket, ip_port)
返回不存在的页面
import socket
def handle_client_request(n_socket, client_ip_port):
buf = n_socket.recv(4096)
if buf:
print(buf.decode())
buf = buf.decode()
file_name = buf.split(' ', 2)[1]
if file_name == '/':
file_name = '/index.html'
print(file_name)
response_line = 'HTTP/1.1 200 OK\r\n'
response_header = 'Server:PY\r\nName:py42\r\n'
try:
f = open('static' + file_name, 'rb')
data = f.read()
f.close()
except FileNotFoundError:
f = open('static/error.html', 'rb')
data = f.read()
f.close()
response_line = 'HTTP/1.1 404 NOT FOUND\r\n'
response = (response_line + response_header + '\r\n').encode() + data
n_socket.send(response)
n_socket.close()
else:
print(f'{client_ip_port} 下线了')
if __name__ == '__main__':
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
server_socket.bind(('', 8989))
server_socket.listen(128)
while True:
new_socket, ip_port = server_socket.accept()
print(f'{ip_port}连接了')
handle_client_request(new_socket, ip_port)
多任务版本
import socket
import threading
def handle_client_request(n_socket, client_ip_port):
buf = n_socket.recv(4096)
if buf:
print(buf.decode())
buf = buf.decode()
file_name = buf.split(' ', 2)[1]
if file_name == '/':
file_name = '/index.html'
print(file_name)
response_line = 'HTTP/1.1 200 OK\r\n'
response_header = 'Server:PY\r\nName:py42\r\n'
try:
f = open('static' + file_name, 'rb')
data = f.read()
f.close()
except FileNotFoundError:
f = open('static/error.html', 'rb')
data = f.read()
f.close()
response_line = 'HTTP/1.1 404 NOT FOUND\r\n'
response = (response_line + response_header + '\r\n').encode() + data
n_socket.send(response)
n_socket.close()
else:
print(f'{client_ip_port} 下线了')
if __name__ == '__main__':
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
server_socket.bind(('', 8989))
server_socket.listen(128)
while True:
new_socket, ip_port = server_socket.accept()
print(f'{ip_port}连接了')
sub_thread = threading.Thread(target=handle_client_request, args=(new_socket, ip_port))
sub_thread.start()
面向对象版本
import socket
import threading
class HTTPWebServer(object):
def __init__(self):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind(('', 9090))
self.server_socket.listen(128)
def __del__(self):
self.server_socket.close()
def start(self):
while True:
new_socket, ip_port = self.server_socket.accept()
sub_thread = threading.Thread(target=self.handle_client_request, args=(new_socket,ip_port))
sub_thread.start()
@staticmethod
def handle_client_request(n_socket, client_ip_port):
buf = n_socket.recv(4096)
if buf:
buf = buf.decode()
file_name = buf.split(' ', 2)[1]
if file_name == '/':
file_name = '/index.html'
response_line = 'HTTP/1.1 200 OK\r\n'
response_header = 'Server:Python\r\nName:Python42\r\n'
try:
f = open('static' + file_name, 'rb')
data = f.read()
f.close()
except FileNotFoundError:
f = open('static/error.html', 'rb')
data = f.read()
f.close()
response_line = 'HTTP/1.1 404 NOT FOUND\r\n'
response = (response_line + response_header + '\r\n').encode() + data
n_socket.send(response)
else:
print(f'{client_ip_port} 下线了.....')
n_socket.close()
if __name__ == '__main__':
web = HTTPWebServer()
web.start()
静态Web服务器-命令行启动版
"""
-*- coding:utf-8 -*-
Fille: 返回固定页面.py
Software: PyCharm
LoginName: mayanliang
Author: Mayanliang
Emali: mylgcs@163.com
@Time: 2024/6/19 20:30
"""
import socket
import threading
import sys
"""
命令 参数 参数
python3 xxx.py 9898
"""
class HTTPWebServer(object):
def __init__(self, port):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
self.server_socket.bind(('', port))
self.server_socket.listen(128)
def __del__(self):
self.server_socket.close()
def start(self):
while True:
new_socket, ip_port = self.server_socket.accept()
sub_thread = threading.Thread(target=self.handle_client_request, args=(new_socket, ip_port))
sub_thread.start()
@staticmethod
def handle_client_request(n_socket, client_ip_port):
buf = n_socket.recv(4096)
if buf:
buf = buf.decode()
file_name = buf.split(' ', 2)[1]
if file_name == '/':
file_name = '/index.html'
response_line = 'HTTP/1.1 200 OK\r\n'
response_header = 'Server:Python\r\nName:Python42\r\n'
try:
f = open('static' + file_name, 'rb')
data = f.read()
f.close()
except FileNotFoundError:
f = open('static/error.html', 'rb')
data = f.read()
f.close()
response_line = 'HTTP/1.1 404 NOT FOUND\r\n'
response = (response_line + response_header + '\r\n').encode() + data
n_socket.send(response)
else:
print(f'{client_ip_port} 下线了.....')
n_socket.close()
if __name__ == '__main__':
buf = sys.argv
if len(buf) == 2:
port = int(buf[1])
else:
port = 8888
web = HTTPWebServer(port)
web.start()