Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—ConnectionError:超过最大重试次数_Python_Node.js_Http_Webserver - Fatal编程技术网

Python—ConnectionError:超过最大重试次数

Python—ConnectionError:超过最大重试次数,python,node.js,http,webserver,Python,Node.js,Http,Webserver,当我的服务器(称为服务器A)向另一台服务器(全it服务器B)上的资源发出请求时,我偶尔会遇到此错误: ConnectionError:HTTPConnectionPool(host='some_ip',port=some_port):url超过了最大重试次数:/some_url/(由:[Errno 111]连接被拒绝引起) 异常中的消息是 消息:无:url:/some\u url/(由重定向引起)超过了最大重试次数 我之所以包括它,是因为它有额外的信息(由重定向引起) 正如我所说,我控制这个请求

当我的服务器(称为服务器A)向另一台服务器(全it服务器B)上的资源发出请求时,我偶尔会遇到此错误:

ConnectionError:HTTPConnectionPool(host='some_ip',port=some_port):url超过了最大重试次数:/some_url/(由:[Errno 111]连接被拒绝引起)

异常中的消息是
消息:无:url:/some\u url/(由重定向引起)超过了最大重试次数

我之所以包括它,是因为它有额外的信息
(由重定向引起)

正如我所说,我控制这个请求中涉及的两个服务器,因此我可以对其中一个和/或两个服务器进行更改。此外,该错误似乎是间歇性的,因为它并非每次都发生

潜在相关信息——服务器A是运行apache的Python服务器,服务器B是NodeJS服务器。我并不完全是一个web服务器向导,所以除此之外,我不确定哪些信息是相关的

是否有人确切知道此错误的含义,或者如何着手调查修复?或者,是否有人知道哪个服务器可能是问题所在,是发出请求的服务器还是接收请求的服务器


编辑:我们对外部web资源的调用也开始出错。

这看起来像是节点端的重定向循环

如果提到服务器B是节点服务器,那么如果路由设置不正确,可能会意外创建重定向循环。例如,如果在服务器B(节点服务器)上使用express,则可能有两条路由,并假设将路由逻辑保留在单独的模块中:

var routes = require(__dirname + '/routes/router')(app);
//... express setup stuff like app.use & app.configure
app.post('/apicall1', routes.apicall1);
app.post('/apicall2', routes.apicall2);
然后,您的routes/router.js可能看起来像:

module.exports = Routes;

function Routes(app){
    var self = this;
    if (!(self instanceof Routes)) return new Routes(app);
    //... do stuff with app if you like
}

Routes.prototype.apicall1 = function(req, res){
    res.redirect('/apicall2');
}
Routes.prototype.apicall2 = function(req, res){
    res.redirect('/apicall1');
}
这个例子很明显,但在某些路由中,可能有一个重定向循环隐藏在一堆条件中。我将从边缘案例开始,比如所讨论的路由中的条件结束时发生的情况,如果调用(例如)没有正确的参数,那么默认行为是什么,异常行为是什么

另外,您可以使用节点验证器()之类的工具来帮助确定和处理错误的请求或post参数

// Inside router/routes.js:
var check = require('validator').check;

function Routes(app){ /* setup stuff */ }

Routes.prototype.apicall1 = function(req, res){
    try{
        check(req.params.csrftoken, 'Invalid CSRF').len(6,255);
        // Handle it here, invoke appropriate business logic or model, 
        // or redirect, but be careful! res.redirect('/secure/apicall2');
    }catch(e){
        //Here you could Log the error, but don't accidentally create a redirect loop
        // send appropriate response instead
        res.send(401);
    }
}
为了帮助确定它是否是一个重定向循环,您可以做以下几件事之一,您可以使用curl以相同的post参数点击url(假设它是一个post,否则您可以使用chrome,如果它注意到重定向循环,它将在控制台中出错),或者,您可以写入节点服务器上的stdout,或者在有问题的路由中注销syslog

希望对你有所帮助,幸好你提到了“重定向引起的”部分,那就是我认为的问题


上面的示例情况使用express来描述这种情况,但是如果您根本不使用任何框架或库,当然问题也可以通过使用connect、其他框架甚至您自己的处理程序代码来解决。不管是哪种方式,我都习惯于进行良好的参数检查,并始终测试您的边缘情况,我在过去很匆忙的时候就遇到了这个问题。

您在“某些ip”和端口上的连接被拒绝。那很可能是因为 -没有服务器实际侦听该端口/IP组合 -发送Conn的防火墙设置被拒绝(不太可能是原因!) -第三,服务器配置错误(更有可能)或繁忙,无法处理请求

我相信,当服务器A试图连接到服务器B时,您会遇到该错误。(假设它是Linux和/或某些unix衍生产品)netstat-ln-tcp在服务器上显示什么?(man netstat了解标志-我们在这里做的是-试图找到所有程序都在哪个端口上侦听)。如果这确实显示您的服务器B正在侦听-iptables-L-n以显示防火墙规则。如果没有问题,很可能是侦听队列的配置不好。()或谷歌搜索


这很可能是服务器B上的错误配置问题。(注意:上面提到的重定向循环-处理不正确可能会导致服务器繁忙!因此解决这个问题也可能解决您的问题)

如果您在python服务器上使用gevent,您可能需要升级版本。看起来gevent的DNS解析有一些bug


这是一个来自请求库的讨论:

您能提供关于服务器a的更多详细信息吗,比如您正在导入哪些库。我使用Python请求库使请求很难说,但您似乎配置了前端Apache,将URL重定向到另一个未转发到nodejs的URL。我认为这里的apache配置是重要的数据。@uʍopǝpısdn apache config是哪个服务器的,A还是B?不能确切地说出来。如果您使用的是代理:以上错误将被排除。这是一个IP问题,表明服务器进程没有运行,与HTTP重定向没有任何关系。繁忙的服务器不会发送ECONREFUNCE,除非服务器进程因负载过高而崩溃。不过,这可能是关于每秒连接数过多的防火墙规则。我会在讨论中的服务器上显示详细信息。没有更多的挖掘就帮不了你。