py网络_HTTP基础响应笔记

HTTP基础响应

在HTTP编程之中核心的本质依然是进行请求和响应,只不过这个时候的响应除了数据之外还需要包含有一些头信息,这些内容一定要被浏览器进行解析执行,浏览器在进行请求的时候需要依据服务器的主机名称和访问端口进行请求的发送。

本次不搞非常繁琐的WEB页面定义,只通过HTTP服务器实现一个最为基础的HTML代码数据的获取,而本次程序将直接使用浏览器作为网络客户端。

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# coding : UTF-8
import socket # HTTP是基于TCP协议,所以一定要使用socket模块
import multiprocessing # 考虑到处理性能,应该为每一次的请求开启一个新的进程
class HTTPServer: # 定义一个HTTP服务器程序类
def __init__(self,port): # 服务器一定要有一个监听端口
self.server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建socket实例
# 考虑到不同系统的问题,80端口是一个必争端口,该端口属于系统的核心端口
self.server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
self.server_socket.bind(("0.0.0.0",port)) # 绑定监听端口
self.server_socket.listen() # 启动监听
def start(self):
while True:
client_socket,client_address = self.server_socket.accept() # 接收用户请求
print("[新的客户端连接]客户端IP:%s、访问端口:%s" % client_address)
# 将每一个客户端都设置为一个独立的进程存在,每一个进程都分别进行请求的回应
handle_client_process = multiprocessing.Process(target=self.handle_response,
args=(client_socket,))
handle_client_process.start() # 启动一个新的进程
def handle_response(self,client_socket): # 对某一个指定的客户端进行响应
request_headers = client_socket.recv(1024)
print("[客户端请求信息]%s" % request_headers.decode())
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "Server:giiiServer\r\nContent-Type:text/html\r\n"
response_body =''' <html>
<head>
<title>基础响应</title>
<meta charset='UTF-8'>
</head>
<body>
<h1>你好啊,基础响应</h1>
<h1>你好啊,响应的基础</h1>
</body>
</html>
'''
response = response_start_line + response_headers + "\r\n" + response_body
client_socket.send(bytes(response,"UTF-8"))
client_socket.close()
def main(): # 主函数
http_server = HTTPServer(80)
http_server.start()
if __name__ == "__main__":
main()

测试结果


py网络_HTTP基础响应笔记
https://blog.wangxk.cc/2020/02/06/py网络-HTTP基础响应笔记/
作者
Mike
发布于
2020年2月6日
许可协议