尝试按照本教程制作wsgi服务器Let's Build a Web Server.
但是使用python 3.5.2中的以下代码获取错误TypeError: initial_value must be str or None, not bytes
。
import io
env['wsgi.input'] = io.StringIO(self.request_data)
我该如何解决这个问题。提前谢谢。
答案 0 :(得分:1)
将import StringIO
更改为import io
将request_line=request_line.rstrip('\r\n')
更改为request_line=request_line.rstrip(b'\r\n')
将env['wsgi.input']=StringIO.StringIO(self.request_data)
更改为env['wsgi.input'] = io.BytesIO(self.request_data)
将self.client_connection.sendall(response)
更改为self.client_connection.sendall(response.encode())
希望现在工作正常。
答案 1 :(得分:0)
首先,该教程使用python2,因此如果您尝试将其直接应用于python3,可能会遇到其他问题
根据PEP3333(针对python3更新的WSGI规范),wsgi.input
environ variable应该是字节流,而不是文本流,因此您应该使用io.BytesIO()
,而不是{{1 }}
您目前获得的错误是因为io.StringIO
为self.request_data
,但bytes
要求其参数为io.StringIO()
。