【发布时间】:2021-06-22 13:09:12
【问题描述】:
我在处理这个代码块时遇到了问题:
with requests.Session() as s:
_hs = s.headers
req = requests.Request('POST', url, data=json.dumps(data), headers=headers)
prepared_req = req.prepare()
if 'Content-Length' in prepared_req.headers:
prepared_req.headers.pop('Content-Length')
rsp = s.send(prepared_req, timeout=self._TIMEOUT)
try:
rsp.raise_for_status()
except requests.HTTPError:
self._logger.exception("error in retrieving response from %s -- response content: %s",
url, rsp.content)
raise
return rsp.json()
Content-Length 已从 PreparedRequest 标头中正确删除,但在 send 期间出现问题:
Traceback (most recent call last):
File "/opt/projects/MyProj/my-http-client/my_http_client/http_client.py", line 297, in _http_post
rsp = s.send(prepared_req, timeout=self._TIMEOUT)
File "/home/user/venvs/my-http-client-venv/lib/python3.8/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/home/user/venvs/my-http-client-venv/lib/python3.8/site-packages/requests/adapters.py", line 472, in send
low_conn.send(i)
File "/usr/lib/python3.8/http/client.py", line 975, in send
self.sock.sendall(d)
TypeError: a bytes-like object is required, not 'str'
如果我用del 删除标题,也会发生同样的事情:
del prepared_req.headers['Content-Length']
有人知道怎么回事吗?没有headers.pop,一切正常。
【问题讨论】:
标签: python python-requests http-headers urllib3