【发布时间】:2021-09-08 01:17:27
【问题描述】:
目前我的代码是:
var ProxyVerifier = require('proxy-verifier');
const fs = require('fs');
var request = require('request');
const { doesNotMatch } = require('assert');
let config = {
file: 'socks4_proxies.txt',
destFile: 'result.txt'
}
function countFileLines(filePath) {
return new Promise((resolve, reject) => {
let lineCount = 0;
fs.createReadStream(filePath)
.on("data", (buffer) => {
let idx = -1;
lineCount--; // Because the loop will run once for idx=-1
do {
idx = buffer.indexOf(10, idx + 1);
lineCount++;
} while (idx !== -1);
}).on("end", () => {
resolve(lineCount);
}).on("error", reject);
});
};
function getProxies() {
return new Promise(function (resolve, reject) {
request.get('https://api.proxyscrape.com/?request=displayproxies&proxytype=socks4&timeout=2500', function (error, response, body) {
if (!error && response.statusCode == 200) {
resolve(body);
console.log('Proxies pulled!')
} else {
console.log(`Oops, ProxyScrape is down! Please try again later / contact me`)
}
});
});
}
async function proxyTestLogic(proxy_list, index) {
var countLines = await countFileLines('file.txt')
console.log(index)
if (index > 150) {
console.log('Ok good done you can stop now')
return 'stop';
} else {
var splitProxy = proxy_list.split(':');
var ipPortArr = [splitProxy[0], Number(splitProxy[1])]
var proxy = {
ipAddress: ipPortArr[0],
port: ipPortArr[1],
protocol: 'socks4'
};
ProxyVerifier.testAll(proxy, function (error, result) {
if (error) {
} else {
if (result["protocols"]["socks4"]["ok"] == true) {
fs.appendFile('file.txt', ipPortArr[0] + ':' + ipPortArr[1] + '\n', (err) => {
});
} else {
}
}
});
}
}
function testProxies(proxies) {
return new Promise(function (resolve, reject) {
let newLined = proxies.replace(/\r|\"/gi, '').split("\n")
newLined.forEach((item, index) => {
proxyTestLogic(item, index)
})
})
}
async function main() {
let proxies = await getProxies();
testProxies(proxies)
}
main();
如您所见,它是一个代理验证器。它使用 forEach 函数计算数组中的每个代理。我试图让它停止在写入 socks4_proxies.txt 的 x 行数处,当我在其上启用 console.log 功能时,它只会输出同一行 1200 次(列表中的代理数量)。我该如何解决这个问题?
(我还应该提到我在 node.js 中编码)
谢谢, 吉布西尔
【问题讨论】:
标签: javascript node.js arrays foreach proxies