浏览器请求,然后socket服务端通过open方法打开一个html文本,并发送给浏览器,代码如下:
1 import socket 2 3 4 def custom_html(): 5 6 sk = socket.socket() 7 sk.bind(('127.0.0.1', 8008)) 8 sk.listen(3) 9 10 while True:11 con, add = sk.accept()12 data = con.recv(1024)13 print(data.decode('utf8'))14 with open('hello.html', 'rb') as f:15 html_data = f.read()16 con.sendall(html_data)17 con.close()18 19 20 if __name__ == '__main__':21 custom_html()
html代码如下:
1hello,huangjin
在edge浏览器下,输入127.0.0.1:8008,回车,可以正常访问:
但在火狐浏览器上面显示如下:
以文本的形式展现了出来,这显然并不是我要的东西,研究后发现少了一行代码:
1 con.sendall(bytes('HTTP/1.1 201 OK\r\n\r\n', 'utf8'))
更改后的代码为:
1 while True:2 con, add = sk.accept()3 data = con.recv(1024)4 print(data.decode('utf8'))5 with open('hello.html', 'rb') as f:6 html_data = f.read()7 con.sendall(bytes('HTTP/1.1 201 OK\r\n\r\n', 'utf8'))8 con.sendall(html_data)9 con.close()
这样火狐浏览器就可以正常访问,为了防止在其他浏览器上面也会出现这样的问题,这句代码最好不要省略
: custom_html()