【发布时间】:2016-04-06 17:49:02
【问题描述】:
我们有一些自定义模块,我们在其中重新定义了open、seek、read、tell 函数以根据参数仅读取文件的一部分。
但是,这个逻辑覆盖了默认的tell 并且python requests 正在尝试计算涉及使用tell() 的内容长度,然后重定向到我们的自定义tell 函数并且逻辑有问题并返回错误的值。我尝试了一些更改,它会引发错误。
从请求的models.py中找到以下内容:
def prepare_content_length(self, body):
if hasattr(body, 'seek') and hasattr(body, 'tell'):
body.seek(0, 2)
self.headers['Content-Length'] = builtin_str(body.tell())
body.seek(0, 0)
elif body is not None:
l = super_len(body)
if l:
self.headers['Content-Length'] = builtin_str(l)
elif (self.method not in ('GET', 'HEAD')) and (self.headers.get('Content-Length') is None):
self.headers['Content-Length'] = '0'
目前,我无法弄清楚错误在哪里,并强调要进行更多调查并修复它。除了 python 请求的内容长度计算之外,其他一切都有效。
所以,我创建了自己的定义来查找内容长度。我已经在请求标头中包含了该值。但是,请求仍在准备内容长度并抛出错误。
如何限制不准备内容长度并使用指定的内容长度?
【问题讨论】:
-
嗯,您正在更改标准函数和方法。你怎么能期望事情正常工作?
-
@AndreaCorbellini 嗨,是的,你是对的。但是,这是我们将文件拆分为多个部分并上传所必需的。好吧,它已经在那里很久了。而且最近我们从 urllib2 切换到 requests,所以现在遇到了这个错误。
标签: python python-requests content-length http-content-length