服务器上的连接已中止。',BadStatusLine("''",)?

时间:2018-02-15 18:41:37

标签: python python-3.x python-3.4

我使用以下代码从网络获取图像:

path = 'http://domgvozdem.ru/images/ustanovka-kondicionera-svoimi-rukami.jpg'
def exists(path):
    r = requests.head(path)
    return r.status_code == requests.codes.ok

我收到了一个错误:

  

发生了主要错误:('连接已中止。',BadStatusLine("''",))发生主要错误:(&# 39;连接中止。',BadStatusLine("''",))

如何解决这个问题?它被主人阻止了吗?

1 个答案:

答案 0 :(得分:3)

当您的Python客户端收到一个空响应(标头/ body)时,您会收到此错误。

BTW较新的Python版本将引发不同的Exception, 服务器断开连接或出现网络问题时,可能会发生这种情况。

就我而言,我们花了数周的时间尝试重制它,直到找到主要原因为止, 我们有一个Python应用程序将请求发送到Nginx负载均衡器后面的服务

我们发现,当客户端超过默认的Nginx配置client_header_timeout / client_body_timeout(60秒)时,Nginx将断开连接,这是Nginx等待客户端的其他数据包的时间。

您可以遵循此参考文献http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout

当我们的应用程序加载有CPU处理时,将建立连接,但标头和请求主体在发送之前会有很长的延迟,超过82秒。

因此Nginx关闭连接并返回重置数据包(记录的tcpdump具有空主体和标头),正式它应该返回状态代码408,这没有发生。

我们通过将两个参数的client_header_timeout / client_body_timeout增加到180s来解决了这个问题:

server {
..
client_body_timeout 180s;
client_header_timeout 180s;
}