程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了IOError:请求数据读取错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决IOError:请求数据读取错误?

开发过程中遇到IOError:请求数据读取错误的问题如何解决?下面主要结合日常开发的经验,给出你关于IOError:请求数据读取错误的解决方法建议,希望对你解决IOError:请求数据读取错误有所启发或帮助;

我也有这个例外。在Apache错误日志文件中,我看到以下内容:

[Wed Aug 17 08:30:45 2011] [error] [clIEnt 10.114.48.206] (70014)End of file found: mod_wsgi (pID=9722): Unable to get bucket brigade for request., referer: https://egs-work/moDWork/beleg/188074/edit/
[Wed Aug 17 08:30:45 2011] [error] [clIEnt 10.114.48.206] mod_wsgi (pID=3572): Exception occurred processing Wsgi script '/home/moDWork_egs_p/moDWork_egs/apache/django_wsgi.py'.
[Wed Aug 17 08:30:45 2011] [error] [clIEnt 10.114.48.206] IOError: Failed to write data

版本:

apache2-prefork-2.2.15-3.7.x86_64
apache2-mod_wsgi-3.3-1.8.x86_64 WsgiDaemonProcess with threads=1
mod_ssl/2.2.15
linux egs-work 2.6.34.8-0.2-default #1 SMP 2011-04-06 18:11:26 +0200 x86_64 x86_64 x86_64 GNU/linux
openSUSE 11.3 (x86_64)

首先我很困惑,因为最后一行“无法写入数据”不适合django代码“加载发布数据”。但是我想django想要向客户写一个错误页面。但是客户端已取消tcp连接。现在,http 500页面无法写入客户端。

客户端在发送请求之后并获得响应之前已断开连接:

  • 用户关闭浏览器或导航到其他页面。
  • 用户按下重新加载按钮。 我只在POST请求(而不是GET)中看到了这一点。如果使用POST,则Web服务器至少会读取两次:第一个获取标头,第二个获取数据。第二次读取失败。

很容易复制:

插入一些在第一次访问request.POST之前等待的代码(请确保没有中间件在time.sleep()之前访问request.POST):

def edit(request):
    import time
    time.sleep(3)
    #.....

现在进行一次大型POST(例如文件上传)。我不知道Apache缓冲区的大小。但是5 MB应该足够了。当浏览器显示沙漏时,浏览到另一个页面。浏览器将取消该请求,并且异常应在日志文件中。

这是我的中间件,因为我不想在我们的日志文件中获得上述回溯:

class HandleExceptionMIDdleware:

    def process_exception(self, request, exception):
        if isinstance(exception, IOError) and 'request data read error' in unicode(exception):
            logging.info('%s %s: %s: request was canceled by the clIEnt.' % (
                    request.build_absolute_uri(), request.user, exception))
            return httpResponseServerError()

解决方法

我似乎正在收到IOError:当我执行Ajax上传时,请求数据读取错误很多。例如,每5个文件上传一次,就会至少出现3次错误。

其他人似乎也有同样的问题。例如。

  • Django上传失败,请求数据读取错误
  • Django文件上传偶尔会失败
    其他一些观察:

  • 绝对不是我的互联网连接或浏览器问题。似乎在所有浏览器chrome / FF / opera上都在发生。

  • 我正在lucid上运行django 1.1.1 Apache / 2.2.14(Ubuntu)mod_ssl / 2.2.14 OpenSSL / 0.9.8k mod_wsgi / 2.8 Python / 2.6.5 。

  • 它也不是文件大小。有时我可以上传1个以上的MB文件,但无法上传180 Kb的文件。

追溯

TraceBACk (most recent call last):

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/core/handlers/base.py",line 98,in get_response
    response = middleware_method(request,E)

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/core/handlers/base.py",line 92,in get_response
    response = callBACk(request,*callBACk_args,**callBACk_kwargs)

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/contrib/auth/decorators.py",line 78,in __call__
    return self.view_func(request,*args,**kwargs)

  File "/home/ubuntu/webapps/anonymous_app/app/do_work/views/__init__.py",line 391,in some_form_ajax_upload
    f = request.FILEs.get('file_upload')

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/core/handlers/wsgi.py",line 187,in _get_files
    self._load_post_and_files()

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/core/handlers/wsgi.py",line 137,in _load_post_and_files
    self._post,self._files = self.parse_file_upload(self.META,self.environ['wsgi.input'])

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/__init__.py",line 124,in parse_file_upload
    return parser.parse()

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 133,in parse
    for item_type,meta_data,field_stream in Parser(stream,self._boundary):

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 606,in __iter__
    for sub_stream in boundarystream:

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 420,in next
    return LazyStream(BoundaryIter(self._stream,self._boundary))

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 446,in __init__
    unused_char = self._stream.read(1)

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 299,in read
    out = ''.join(parts())

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 292,in parts
    chunk = self.next()

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 314,in next
    output = self._producer.next()

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 375,in next
    data = self.flo.read(self.chunk_sizE)

  File "/home/ubuntu/.virtualenvs/anonymous_app/lib/python2.6/site-packages/django/http/multipartparser.py",line 405,in read
    return self._file.read(num_bytes)

IOError: request data read error


<WSGIrequest
GET:<QueryDict: {}>,POST:<could not parse>,COOKIES:{'__utma': '168279989.1688771210.1285773436.1285773436.1285773436.1','__utmb': '168279989.20.10.1285773436','__utmc': '168279989','__utmz': '168279989.1285773436.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(nonE)','beta': 'True','sessionid': 'b1ecf92f2bba13e1885d07803e10aa03','timezone_offset': '-330'},META:{'CONTENT_LENGTH': '188575','CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------57602381214905740261171925981','DOCUMENT_ROOT': '/htdocs','GATEWAY_INTERFACE': 'CGI/1.1','httpS': '1','http_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','http_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7','http_ACCEPT_ENCODING': 'gzip,deflate','http_ACCEPT_LANGUAGE': 'en-us,en;q=0.5','http_CONNECTION': 'keep-alive','http_COOKIE': 'beta=True; __utma=168279989.1688771210.1285773436.1285773436.1285773436.1; __utmb=168279989.20.10.1285773436; __utmc=168279989; __utmz=168279989.1285773436.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(nonE); sessionid=b1ecf92f2bba13e1885d07803e10aa03; timezone_offset=-330','http_HOST': 'xxxxxx.compute-1.amazonaws.com','http_KEEP_ALIVE': '115','http_REFERER': 'https://ec2-184-72-79-96.compute-1.amazonaws.com/do-my-somees/enter/some-documents/','http_user_ageNT': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10','PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin','PATH_INFO': u'/do-my-somees/enter/some-documents/ajax-upload/Other-some-Document/','PATH_TRANSLATED': '/home/ubuntu/webapps/anonymous_app/setTings/apache/qa.wsgi.py/do-my-somees/enter/some-documents/ajax-upload/Other-some-Document/','QUERY_StriNG': '','REMOTE_ADDR': '','REMOTE_PORT': '15561','requEST_METHOD': 'POST','requEST_URI': '/do-my-somees/enter/some-documents/ajax-upload/Other-some-Document/','SCRIPT_FILename': '/home/ubuntu/webapps/anonymous_app/setTings/apache/qa.wsgi.py','SCRIPt_name': u'','SERVER_ADDR': '10.196.142.182','SERVER_ADMIN': 'dev@anonymous_app.com','SERVER_NAME': 'ec2-184-72-79-96.compute-1.amazonaws.com','SERVER_PORT': '443','SERVER_PROTOCOL': 'http/1.1','SERVER_SIGNATURE': '<address>Apache/2.2.14 (Ubuntu) Server at ec2-184-72-79-96.compute-1.amazonaws.com Port 443</address>\n','SERVER_SOFTWARE': 'Apache/2.2.14 (Ubuntu)','SSL_TLS_SNI': 'ec2-184-72-79-96.compute-1.amazonaws.com','mod_wsgi.application_group': 'qa.anonymous_app.com|','mod_wsgi.callable_object': 'application','mod_wsgi.listener_host': '','mod_wsgi.listener_port': '443','mod_wsgi.process_group': '','mod_wsgi.reload_mechanism': '0','mod_wsgi.script_reloading': '1','mod_wsgi.version': (2,8),'wsgi.errors': <mod_wsgi.Log object at 0xb9456860>,'wsgi.file_wrapper': <built-in method file_wrapper of mod_wsgi.Adapter object at 0xb936a968>,'wsgi.input': <mod_wsgi.Input object at 0xb9720e30>,'wsgi.multiprocess': True,'wsgi.multithread': false,'wsgi.run_once': false,'wsgi.url_scheR_804_11845@e': 'https','wsgi.version': (1,0)}>

大佬总结

以上是大佬教程为你收集整理的IOError:请求数据读取错误全部内容,希望文章能够帮你解决IOError:请求数据读取错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。