【问题标题】:BaseHTTPRequestHandler hangs on self.rfile.read()BaseHTTPRequestHandler 挂在 self.rfile.read()
【发布时间】:2017-09-04 22:11:30
【问题描述】:

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

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

代码:

def do_POST(self):
    print self.rfile
    # Processing HTTP POST request data
    content_len = int(self.headers.getheader('content-length'))
    print 'Reading from HTTP header. Size: %s' % (content_len)

    # THIS IS WHERE IT HANGS 
    post_body_json = self.rfile.read(content_len)

    print 'Got it. Moving on, now.'
    post_body = json.loads(post_body_json)
    image_data = post_body.get('img_string_b64', 'No Image String')

    print 'Decoding image string.'
    # Processing image data
    image_name = 'image.jpg'
    decoded_str = base64.decodestring(image_data)
    self.write_image_to_system(decoded_str, image_name)

    print 'Getting text translation.'
    opencv_handler = OpenCVHandler()
    # Get translation from OpenCV then play text audio
    text_trans = opencv_handler.get_text_translation_from_image(image_name)
    opencv_handler.play_audio_translation_from_text(text_trans)

    # Responding to the POST requester.
    # text_trans = 'Translated'
    response = text_trans
    self.send_response(200)  # OK
    self.send_header('Content-type', 'text/html')
    self.end_headers()
    self.wfile.write(response)

    return

【问题讨论】:

  • 它可能会挂起错误的长度(从错误的标头接收),尝试始终将长度输出到控制台,或者只是调试。
  • 这不是我不认为的问题。标头中的长度与客户端发送的长度相同。
  • 好吧,如果有很多东西要重写,我很抱歉,但也许你可以尝试使用requests 模块?太棒了,谷歌“python请求”
  • 是的,使用替代模块对我来说并不是一个真正的选择

标签: html python-2.7 http http-headers basehttprequesthandler


【解决方案1】:

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

form = cgi.FieldStorage(
    fp=self.rfile,
    headers=self.headers,
    environ={'REQUEST_METHOD': 'POST'}
)

一旦删除,它就起作用了。 希望对你有帮助。

【讨论】:

  • 谢谢,帮了大忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多