如何不让 python 请求计算 content-length 并使用提供的?
How not to let python requests calculate content-length and use the provided one?
我们有一些自定义模块,我们在其中重新定义了 open
、seek
、read
、tell
函数以根据参数仅读取文件的一部分。
但是,此逻辑会覆盖默认值 tell
并且 python requests
正在尝试计算涉及的 content-length使用 tell()
,然后重定向到我们的自定义 tell
函数,逻辑有问题,returns 是一个错误的值。而且我尝试了一些更改,它会引发错误。
从 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 请求的 content-length 计算外,其他一切都有效。
因此,我创建了自己的查找 content-length 的定义。我已将值包含在请求 header 中。但是,请求仍在准备 content-length 并抛出错误。
如何限制不准备content-length而使用指定的content-length?
Requests 可让您在发送前修改请求。参见 Prepared Requests。
例如:
from requests import Request, Session
s = Session()
req = Request('POST', url, data=data, headers=headers)
prepped = req.prepare()
# do something with prepped.headers
prepped.headers['Content-Length'] = your_custom_content_length_calculation()
resp = s.send(prepped, ...)
如果您的会话有自己的配置(如 cookie 持久性或连接池),那么您应该使用 s.prepare_request(req)
而不是 req.prepare()
。
我们有一些自定义模块,我们在其中重新定义了 open
、seek
、read
、tell
函数以根据参数仅读取文件的一部分。
但是,此逻辑会覆盖默认值 tell
并且 python requests
正在尝试计算涉及的 content-length使用 tell()
,然后重定向到我们的自定义 tell
函数,逻辑有问题,returns 是一个错误的值。而且我尝试了一些更改,它会引发错误。
从 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 请求的 content-length 计算外,其他一切都有效。
因此,我创建了自己的查找 content-length 的定义。我已将值包含在请求 header 中。但是,请求仍在准备 content-length 并抛出错误。
如何限制不准备content-length而使用指定的content-length?
Requests 可让您在发送前修改请求。参见 Prepared Requests。
例如:
from requests import Request, Session
s = Session()
req = Request('POST', url, data=data, headers=headers)
prepped = req.prepare()
# do something with prepped.headers
prepped.headers['Content-Length'] = your_custom_content_length_calculation()
resp = s.send(prepped, ...)
如果您的会话有自己的配置(如 cookie 持久性或连接池),那么您应该使用 s.prepare_request(req)
而不是 req.prepare()
。