首页 > 代码库 > 用python3写一个简单的http服务器
用python3写一个简单的http服务器
# Written by Vamei import socket # Address HOST = ‘‘ PORT = 8000 # Prepare HTTP response text_content = ‘‘‘HTTP/1.x 200 OK Content-Type: text/html <head> <title>WOW</title> </head> <html> <p>Wow, Python Server</p> <IMG src="http://www.mamicode.com/test.jpg"/> </html> ‘‘‘ # Read picture, put into HTTP format f = open(‘test.jpg‘,‘rb‘) pic_content = ‘‘‘ HTTP/1.x 200 OK Content-Type: image/jpg ‘‘‘ # pic_content = pic_content + f.read() pic_content = pic_content.encode(‘UTF-8‘) + f.read() f.close() # Configure socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) # infinite loop, server forever while True: # 3: maximum number of requests waiting s.listen(3) conn, addr = s.accept() request = conn.recv(1024).decode() method = request.split(‘ ‘)[0] src = http://www.mamicode.com/request.split(‘ ‘)[1]>
初始代码来自http://www.cnblogs.com/vamei/archive/2012/10/30/2744955.html
原始代码估计是在python2中运行的,在python3中运行报错,大部分报错由于类型转换导致的,大致的意思是说bytes类型不能与str类型直接相加,所以我们需要在关键处添加.encode()和.decode(),其他主要内容均来自vamei,实测可用。
整个请求的流程,是客户端访问127.0.0.1:8000,服务器响应连接后,根据解析的method为‘GET’,发送给客户端准备好的text_content,发送完之后连接断开,客户端浏览器按照html的方式解析这段字符串内容,发现有一个链接指向根文件目录下的test.jpg,于是再次向服务端请求/test.jpg的内容,服务端同上,知道method为/test.jpg后,将准备好的图片内容加上文件头发送过去,发完连接立刻中断。
所以HTTP其实是TCP的一种变种,先是建立一个长连接,然后一个客户端请求数据,服务端根据对方的请求发送相应数据,发完立刻断。而文中socket.SOCK_STREAM属性,其实就是指的TCP。
用python3写一个简单的http服务器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。