htpp协议Rquest Headers格式:
请求方法空格URL空格协议版本回车符换行符
头部字段名:值回车符换行符
···
头部字段名:值回车符换行符
回车符换行符
请求数据
socket网络聊天
服务端
#sokcet服务断 importsocket importthreading server =socket.socket() #绑定到0.0.0.0:8000端口上 server.bind(('0.0.0.0',8000)) #如果是绑定127.0.0.1,那么只能本地连接 server.listen() defhandle_sock(sock,addr): whileTrue: #recv是阻塞的 tmp_data = sock.recv(1024) print(tmp_data.decode("utf8")) input_data =input() sock.send(input_data.encode("utf8")) #获取客户端连接并启动线程去处理 whileTrue: #阻塞,等待连接 sock,addr =server.accept() #启动一个线程去处理新的用户连接 client_thread = threading.Thread(target=handle_sock,args=(sock,addr)) client_thread.start() #sock.close()
客户端
#socket客户端 importsocket client =socket.socket() client.connect(('192.168.2.129',8000)) whileTrue: input_data =input() client.send(input_data.encode('utf8')) server_data = client.recv(1024) print(server_data.decode('utf8')) client.close()
socket模拟http实现拉取百度首页源码:
#socket客户端 importsocket http_client =socket.socket() http_client.connect(('www.baidu.com',80)) html = "GET / HTTP/1.1 Connection:close "http_client.send(html.encode("utf8")); data = b"" whileTrue: tmp = http_client.recv(1024) iftmp: data +=tmp; else: break print(data.decode('utf8')) input()
socket模拟http实现nginx接受访问:
#tcp实现http协议 importsocket server =socket.socket() server.bind(('0.0.0.0',80)) server.listen() #获取客户端连接并启动线程去处理 whileTrue: print("等待连接") #阻塞,等待连接 sock,addr =server.accept() tmp_data = sock.recv(1024) print("收到浏览器信息:") print(tmp_data.decode("utf8")) #谷歌浏览器访问 打印为: #GET / HTTP/1.1 #Host: 192.168.2.129 #Connection: keep-alive #Cache-Control: max-age=0 #Upgrade-Insecure-Requests: 1 #User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 #Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 #Accept-Encoding: gzip, deflate #Accept-Language: zh-CN,zh;q=0.9 response_template = '''HTTP/1.1 200 OK <h1>hello</h1>'''sock.send(response_template.encode("utf8")) #浏览器展示形式为: #Request URL: http://192.168.2.129/ #Request Method: GET #Status Code: 200 OK #Remote Address: 192.168.2.129:80 #Referrer Policy: no-referrer-when-downgrade print("已回信息") sock.close() print("已断开连接")
Rquest Headers