一.http协议是一种基于tcp网络传输规范
request: 请求头:请求方式 http/1.1,host等
请求数据:
response回送:
header头:包含浏览器的一些信息,必须有类似这个:http/1.1:200 ok
body:回应的数据
header 和boday区分:通过空行来隔开
实例1:
写一个tcp服务器然后用网页访问服务器返回一个固定的东西:
#coding:utf-8
'''实现一个tcp服务器,然后用网页访问'''
import socket
def serve_celient(new_sock):
#接收数据
recv_data = new_sock.recv(1024)
print(recv_data)
#回送数据
respo_data = 'http/1.1 200 OK\r\n'
respo_data += '\r\n'
respo_data += '<h1>hahahahah</h1>'
new_sock.send(respo_data.encode('utf-8'))
#关闭套接字
new_sock.close()
def main():
#1.创建套接字
tcp_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.绑定
tcp_sock.bind(("",7080))
#2.监听
tcp_sock.listen(128)
#5.等待接收数据
while True:
new_soc,celient_addr = tcp_sock.accept()
print(celient_addr)
serve_celient(new_soc)
#服务客户端
if __name__ == '__main__':
main()
三次握手:(双方指客户端和服务器端) 双方建立连接的
四次挥手:
双方释放资源的
案例2: 在案例1的基础上根据用户的需求来返回不同的界面,
#coding:utf-8
'''实现一个tcp服务器,然后用网页访问'''
import socket
import re
import os
def serve_celient(new_sock):
#为这个酷虎返回数据
recv_data = new_sock.recv(1024)
print(recv_data.decode('utf-8'))
request = recv_data.decode('utf-8').splitlines()
file_name = re.search(r'[^/]+/([^ ]*)',request[0])
print(file_name)
if file_name:
print("*"*50,file_name.group(1))
with open(os.path.join("html",file_name.group(1)),"r") as f:
html_content = f.read()
#回送数据
respo_data = 'http/1.1 200 OK\r\n'
respo_data += '\r\n'
#respo_data += '<h1>hahahahah</h1>'
new_sock.send(respo_data.encode('utf-8'))
new_sock.send(html_content.encode('gbk'))
#关闭套接字
new_sock.close()
def main():
#1.创建套接字
tcp_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.绑定
tcp_sock.bind(("",7080))
#2.监听
tcp_sock.listen(128)
#5.等待接收数据
while True:
new_soc,celient_addr = tcp_sock.accept()
print(celient_addr)
serve_celient(new_soc)
#服务客户端
if __name__ == '__main__':
main()