Html BaseHTTPRequestHandler挂起在self.rfile.read()上

Html BaseHTTPRequestHandler挂起在self.rfile.read()上,html,python-2.7,http,http-headers,basehttprequesthandler,Html,Python 2.7,Http,Http Headers,Basehttprequesthandler,我使用BaseHTTPRequestHandler实现了一个python服务器,它在从socket文件对象读取时通常会挂起。我读多少字节似乎无关紧要。我可以读取30k字节,它不会挂起,或者我可以读取7k字节,它会挂起。它正在读取一个Base64字符串编码的图像,所以我知道读取它是否需要一两秒钟,但实际上它只是挂起 然后有时候,当我按下CTRL-C键时,它会解包并神奇地读取所有内容。这真的很奇怪。任何帮助都将不胜感激。谢谢另外,这是python2.7 代码: 我在调用self.rfile.read

我使用BaseHTTPRequestHandler实现了一个python服务器,它在从socket文件对象读取时通常会挂起。我读多少字节似乎无关紧要。我可以读取30k字节,它不会挂起,或者我可以读取7k字节,它会挂起。它正在读取一个Base64字符串编码的图像,所以我知道读取它是否需要一两秒钟,但实际上它只是挂起

然后有时候,当我按下CTRL-C键时,它会解包并神奇地读取所有内容。这真的很奇怪。任何帮助都将不胜感激。谢谢另外,这是python2.7

代码:


我在调用self.rfile.read(length)时遇到了同样的问题,在POST中阻止了AJAX请求。 这是由于先前的一项声明:

form = cgi.FieldStorage(
    fp=self.rfile,
    headers=self.headers,
    environ={'REQUEST_METHOD': 'POST'}
)
一旦移除,它就会工作。
我希望它能有所帮助。

它可能会因为长度错误(从错误的标题接收)而挂起,尝试总是将长度输出到控制台,或者只是调试。这不是我不认为的问题。标题中的长度与客户端发送的长度相同。如果有很多内容需要重写,我很抱歉,但是您可以尝试使用
请求
模块?这很好,谷歌“python请求”是的,使用替代模块对我来说不是一个真正的选择
form = cgi.FieldStorage(
    fp=self.rfile,
    headers=self.headers,
    environ={'REQUEST_METHOD': 'POST'}
)