#javascript #node.js #axios
Вопрос:
Я создаю скрипт, который генерирует прокси-серверы, а затем находит их IP-адреса (местоположение в США), для этого я делаю запросы, используя Got и туннель в качестве прокси-агента. Я ожидаю нескольких проверок местоположения, проблема в том, что независимо от того, делаю ли я 10 или 1000 запросов одновременно, в конце они всегда замедляются (последние 10% запросов). Я действительно не понимаю этого странного поведения, прежде чем оно фактически привело к выходу узла с кодом 0.
const path = require("path");
const fs = require("fs");
const utils = require("./utils");
const _ = require("lodash");
const request = require("got");
const tunnel = require("tunnel");
const proxyManager = {
proxies: {},
proxiesPath: utils.cwdPath("proxies.json"),
async generate(
count = 2000,
speed = 100,
) {
console.log(`Generating amp; localizing ${count} proxies...`);
let counter = 1,
proxiesSet = new Set();
for (let i = 0; i < count; i )
proxiesSet.add(
`http://username:password@isp2.hydraproxy.com:9989`
);
for (const chunk of _.chunk(Array.from(proxiesSet), speed)) {
(
await Promise.all(
chunk.map((x) =>
(async () => {
const res = await this.locate(x);
utils.updateLog(`Progress: ${counter }/${count}`);
return res;
})()
)
)
)
.filter((x) => x)
.forEach((x) => {
this.proxies[x.geo] = this.proxies[x.geo] || [];
this.proxies[x.geo].push({
proxy: x.proxy,
ip: x.ip,
geo: x.geo,
});
});
}
},
async locate(proxy) {
try {
const parts = proxy
.replace("http://", "")
.split("@")
.map((x) => x.split(":"))
.flat();
const proxyObj = {
proxy: {
host: parts[2],
port: parts[3],
proxyAuth: parts.slice(0, 2).join(":"),
},
};
const res = JSON.parse(
await request.get("https://getIpLocation-api.com/myip.json", {
agent: {
http: tunnel.httpOverHttp(proxyObj),
https: tunnel.httpsOverHttp(proxyObj),
},
resolveBodyOnly: true,
timeout: 2000,
})
);
return {
proxy,
geo: [res.country, res.geo.region].join("_"),
ip: res.ip,
};
} catch (error) {
// console.log(
// `Location not found, ERROR: "${error.code || eroor.message}"`
// );
// debugger;
return false;
}
},
};
module.exports = proxyManager;
часть, в которой я жду функции «найти» для нескольких прокси-серверов, — это:
ждите обещания.все( chunk.map ((x) => (асинхронный () =>> { const res = ждите этого.найдите(x); если (!молчит) utils.updateLog(>>
Progress: ${counter }/${count}
); возврат разрешения; })() ) )
Как я уже сказал, не имеет значения, сколько запросов я делаю, последние просто зависают (превышен ТАЙМ-аут). Надеюсь, у кого-то была эта проблема раньше и он может мне помочь, я пробовал все, что нашел за последние 2 дня.