【问题标题】:How to check if a proxy works in JavaScript如何检查代理是否在 JavaScript 中工作
【发布时间】:2019-12-02 21:02:40
【问题描述】:

我正在尝试在 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 地址时,它会给出错误的结果。 我从this site(代理:207.154.231.217:1080)获取代理并用函数检查它,但在回调console.log中我得到了当前错误:

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

我读到这是为了某种需要的身份验证,但我不明白为什么如果我在 this site 上查看它,网站会告诉我代理可以工作。

我正在使用:

【问题讨论】:

  • 什么是request.defaults?这是一个 nodejs 应用程序吗?
  • 你在用windows吗?
  • 不,我使用的是 ubunutu 19.10

标签: javascript node.js proxy


【解决方案1】:

安装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 connection failed. Connection refused. 3)// SOCKS connection failed. Address type not supported.。我也尝试过其他代理
  • 我认为目标网址有问题。我使用了 google.com,没有任何问题。
  • 试试其他代理服务器。 207.154.231.217 我也有问题。
猜你喜欢
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2023-03-30
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
相关资源
最近更新 更多