我使用以下代码从网络获取图像:
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("''",))
如何解决这个问题?它被主人阻止了吗?
答案 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;
}