连接中断:在 Heroku 上向 Django 发送请求时,IncompleteRead(读取 0 字节)

问题描述 投票:0回答:2

我有一个在 Django 中返回 JsonResponse 的视图

def some_view(request):
    return JsonResponse({'a': 1, 'b': 2})

在同一个项目的其他地方,我有一段代码将 GET 请求发送到与该视图相对应的 url:

import requests
def client_func():
    requests.get(url_to_some_views)

它可以在我的本地计算机上运行,但部署到heroku后,有时我会收到错误:

('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))

经过一些测试,我发现

some_view
的响应头中有一个额外的字段:
transfer-encoding: chunked
所以我猜这可能是导致问题的原因,但我仍然不知道如何处理这个问题。到目前为止,我已尝试将
stream=True
添加到
client_func
中的 get 调用中,但问题仍然存在。

有人可以帮我解决这可能是我的问题的原因并解决这个问题吗?非常感谢!

python django python-3.x heroku python-requests
2个回答
3
投票

发现问题了,这是因为我的 1 个 GET 请求有一个正文,它把事情搞砸了。


0
投票

这是我在 Google 上绝望地搜索“IncompleteRead django”时到达的第一个地方,因为我从 Django 应用程序中得到了不完整的 JSON 响应。因此,虽然我的问题与原来的问题无关,但它有足够的症状重叠,我认为在这里给出我的解决方案是合适的。

事实证明,Django 或 NGINX 试图使用临时文件来存储非常大的 JSON 响应。然而,服务器硬盘驱动器已满,因此临时文件创建失败。这显然不会停止响应过程,因此我得到了不完整的 JSON 作为响应,总长度远低于预期。

释放主机上的空间解决了该问题。

特别值得注意的是,使用 Python requests 库发出原始请求并没有指示任何有关“IncompleteRead”的信息,但尝试在请求对象上调用

.json()
失败,因为 JSON 无效(由于截断)

© www.soinside.com 2019 - 2024. All rights reserved.