如何在JavaScript中检查代理是否可用

4

我正在尝试使用JavaScript编写代理检查器。我输入代理数据并检查代理是否可用。

目前,我使用Node.js的request模块编写了此函数。

const  request = require('request');

var checkProxy = function(id, ip, port, url, user, pass, callback) {

    let proxy_url;
    if (user){
        if (user != ''){
            proxy_url = `socks5://${user}:${pass}@${ip}:${port}`;
        }
    } else {
        proxy_url = 'socks5://' + ip + ':' + port;
        console.log(proxy_url)
    }


    var proxyRequest = request.defaults({
        proxy: proxy_url,
    });

    proxyRequest({url: url, timeout: 120000}, function(err, res) {
        var testText = 'content="Brum Brum ..."';
        if( err ) {

            callback(id, ip, port, false, -1, err);
        } else if( res.statusCode != 200 ) {
            callback(id, ip, port, false, res.statusCode, err);
        } else if( !res.body ) {
            callback(id, ip, port, false, res.statusCode, "regex problem" + options.regex + ".");
        } else {
            callback(id, ip, port, true, res.statusCode);
        }

    });
}

作为回调函数,我传递了:
() => {console.log(id, ip, port, false, res.statusCode, err);}

但是当我尝试检查一个IP地址时,它给出了错误的结果。我从这个网站获取了代理(proxy: 207.154.231.217:1080)并使用该函数进行检查,但在回调console.log中,我得到了以下错误:

错误:代理编号:0,IP:207.154.231.217,端口:1080,状态:-1,错误:错误:无法建立隧道套接字,原因=套接字挂起

我读到说这可能是某种需要认证的问题,但我不明白为什么如果我在这个网站上检查它,网站会告诉我代理正在工作。

我正在使用:


request.defaults是什么?这是一个Node.js应用程序吗? - Bergi
你正在使用Windows吗? - Hùng Nguyễn
不,我正在使用Ubuntu 19.10。 - Mat.C
1个回答

2
安装 socks5-http-client 模块并运行以下代码:
const request = require('request');
const Agent = require('socks5-http-client/lib/Agent');


var checkProxy = function (id, ip, port, url, user, pass, callback) {

    var proxyRequest = request.defaults({
        agentClass: Agent,
        agentOptions: {
            socksHost: ip,
            socksPort: port,
            socksUsername: user,
            socksPassword: pass
        }
    });

    proxyRequest({ url: url, timeout: 120000 }, function (err, res) {
        var testText = 'content="Brum Brum ..."';
        if (err) {

            callback(id, ip, port, false, -1, err);
        } else if (res.statusCode != 200) {
            callback(id, ip, port, false, res.statusCode, err);
        } else if (!res.body) {
            callback(id, ip, port, false, res.statusCode, "regex problem" + options.regex + ".");
        } else {
            callback(id, ip, port, true, res.statusCode);
        }

    });
}

我已经安装了socks5-https-client以处理https url,但我不知道发生了什么事情,每次重置脚本时都会得到不同的结果:1) ERROR: proxy num: 1, ip: 185.213.26.165, port: 1080, STATUS: -1, ERROR: Error: SOCKS authentication failed. Unexpected number of bytes received.。2) // SOCKS连接失败。连接被拒绝。 3) // SOCKS连接失败。地址类型不受支持。 我也尝试了其他代理。 - Mat.C
我认为问题在目标URL上。我使用了google.com,没有遇到任何问题。 - Yaroslav Gaponov
尝试其他代理服务器。我也遇到了207.154.231.217的问题。 - Yaroslav Gaponov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接