Я долго искал подобный ответ и не нашел.
Я использую этот код, и он работает довольно хорошо, но только при первом успешном соединении.Однако моя цель - повторить попытку с теми же учетными данными, но с другим хостом и портом.(Я использую несколько шлюзов socks5, и иногда они не реагируют, поэтому мне нужно попробовать другой)
Я пытаюсь вызвать одну и ту же функцию и всегда получаю сообщение об ошибке:
Ошибка: подключить ETIMEDOUT xxx.xxx.xxx.xxx:1081
к TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1082: 14)
ошибка: «ETIMEDOUT»,
код: «ETIMEDOUT»,
syscall: 'connect',
адрес: 'xxx.xxx.xxx.xxx',
порт: 1081}
Похоже, предыдущее соединение не полностью отключено,
Вот фрагмент кода, который я использую для соединения и отправки.
var Agent = require('socks5-https-client/lib/Agent');
var request = require('request');
var fails = 0;
var max_fails = 2;
function get_data_via_socks5(client_host,url_to_check, datas, respon) {
///passing array with connection details and backup socks5 hosts
var api_key = datas.api_key
var gate = datas.gate
if(fails==0) {
var host = datas.host
var login = datas.login
var pass = datas.pass
var port = datas.port
}
if(fails==1) {
var host = datas.host2
var login = datas.login2
var pass = datas.pass2
var port = datas.port2
}
if(fails==2) {
var host = datas.host3
var login = datas.login3
var pass = datas.pass3
var port = datas.port3
}
var jdata = '{somedata:somedata}';
console.log("Trying to connect by:" , host, " on port: " , port, login, pass );
var con = request({
method: 'POST',
url: gate,
body: jdata,
headers: {
'Authorization': 'Basic ' + Buffer.from("apikey:"+api_key).toString('base64'),
},
strictSSL: true,
agentClass: Agent,
agentOptions: {
keepAlive: false,
socksHost: host,
socksPort: port, // Defaults to 1080.
// Optional credentials
socksUsername: login,
sockspassword: pass,
}
}, function(err, res) {
if( err ) {
fails = fails+1
if(fails<=max_fails) {
console.log( 'Failed to get data using: ', host, "Attempt: ",fails, "ERROR:", err);
//con.close()
get_data_via_vpn(client_host,url_to_check,respon);
return
} else {
return console.log( 'Giving up to get data using: ', host, "Failed: ", fails ," attempts");
}
}
if(!err) {
var response = JSON.parse( res.body);
console.log(response);
return respon(response);
}
});
}
Любая помощь будет очень признательна, я действительно застрял с этим.