问题描述:python3编写服务器时出现"io.BufferedReader' object has no attribute 'decode'报错
原因:就是文件操作没做好,file.open()完,没有file.read(),因此没有加载数据
代码如下:
def handleClient(clientSocket):
requestHeaderLines = recvDate.splitlines()
for line in requestHeaderLines:
print(line)
httpRequestMethodLine = requestHeaderLines[0]
getFileName = re.match("[^/]+(/[^ ]*)",httpRequestMethodLine.decode("UTF-8")).group(1)
print("file name is ===> %s"%getFileName)
if "/" == getFileName:
getFileName = documentRoot + "/index.html"
print("try1 filename ====>%s"%getFileName)
else:
getFileName = documentRoot + getFileName
print("file2 name is +++2> %s"%getFileName)
try:
f = open(getFileName, "rb")
print("*"*10)
print(f)
except IOError:
responseHeaderLines = "HTTP/1.1 404 not found \r\n"
responseHeaderLines += " \r\n"
responseBody = "===sorry,file not found==="
else:
responseHeaderLines = "HTTP/1.1 200 ok\r\n"
response_headers = "Server: My server\r\n"
responseBody = f.decode("utf-8")
response = responseHeaderLines + response_headers + "\r\n" + responseBody
clientSocket.send(bytes(response,"utf-8"))
clientSocket.close()
if __name__ == "__main__":
serverSoket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverSoket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)
serverSoket.bind(("",8005))
serverSoket.listen(128)
while True:
clientSocket, clientAddr = serverSoket.accept()
print("[%s, %s]用户连接上了" % clientAddr)
clientP = Process(target=handleClient, args=(clientSocket,))
clientP.start()
clientSocket.close()
运行结果报错如下
File "G:\学习python\web_study\静态web.py", line 44, in handleClient
responseBody = f.decode("utf-8")AttributeError: '_io.BufferedReader' object has no attribute 'decode'
也就是说f文件不能够解码,第一想法是没有读到文件,但是检查运行结果发现已经打印了文件的地址”<_io.BufferedReader name='./html/index.html'>“,没多想。后来查到这个网页,顿时茅塞顿开。
https://cloud.tencent.com/developer/ask/145732/answer/254729
解决办法:
将上述代码进行简单修改就可以了
responseBody = f.read().decode("utf-8")
如果我没有解释清楚,可以加我微信,一块讨论