利用socket模拟http的工作流程。
import socket def server_client(new_socket): """为这个客户端返回数""" # 1. 接收浏览器发送过来的请求,即http请求 # GET / HTTP/1.1 # ... request = new_socket.recv(1024) print(request) # 2.0 返回http格式的数据,给浏览器 # 2.1 准备发送数据给这个浏览器---header response = 'HTTP/1.1 200 OK\r\n' response += '\r\n' # 2.2 准备发送数据给这个浏览器---body response += '666' new_socket.send(response.encode('utf-8')) # 关闭套接字 new_socket.close() def main(): """完成整体的流程控制""" # 1. 创建TCP套接字 tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置当服务器先close,即服务器4次挥手之后资源能够立即 释放。这样就保证了,下次程序可以立即运行 tcp_server .setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 2. 绑定 tcp_server.bind(('', 7890)) # 3. 变为监听套接字 tcp_server.listen(128) while True: # 4. 生成新的套接字 new_socket, client_addr = tcp_server.accept() # 5. 为这个客户端服务 server_client(new_socket) # 关闭监听套接字 tcp_server.close() if __name__ == '__main__': main()
完成以上代码后,在linux运行,然后用浏览器访问(效果如下图)