Nodejs http,socket代理

Nodejs http,socket代理

请问能不能实现类似QQ设置里面测试http代理与socket代理能否连接的功能

10 回复

当然可以实现类似QQ设置中测试HTTP代理和Socket代理是否能连接的功能。下面我会分别展示如何使用Node.js来实现HTTP代理和Socket代理的测试功能。

HTTP代理测试

首先,我们需要一个简单的HTTP客户端来发送请求并检查是否通过代理服务器成功连接到目标URL。

const http = require('http');
const url = require('url');

function testHttpProxy(proxyUrl, targetUrl) {
    const parsedProxy = url.parse(proxyUrl);
    const proxyOptions = {
        host: parsedProxy.hostname,
        port: parsedProxy.port || 8080,
        path: parsedProxy.path,
        method: 'CONNECT',
        headers: {
            'Host': targetUrl.host
        }
    };

    const req = http.request(targetUrl, (res) => {
        console.log(`STATUS: ${res.statusCode}`);
        console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
        res.setEncoding('utf8');
        res.on('data', (chunk) => {
            console.log(`BODY: ${chunk}`);
        });
        res.on('end', () => {
            console.log('No more data in response.');
        });
    });

    req.on('error', (e) => {
        console.error(`problem with request: ${e.message}`);
    });

    req.end();
}

// 使用代理服务器测试
testHttpProxy('http://your-proxy-server:port', 'http://example.com');

Socket代理测试

对于Socket代理,我们可以通过建立一个TCP连接来检查代理服务器是否可用。

const net = require('net');

function testSocketProxy(proxyUrl, targetUrl) {
    const parsedProxy = url.parse(proxyUrl);
    const proxyOptions = {
        host: parsedProxy.hostname,
        port: parsedProxy.port || 8080
    };

    const socket = new net.Socket();

    socket.connect(proxyOptions, () => {
        console.log('Connected to proxy server');
        // 发送 CONNECT 请求
        socket.write(`CONNECT ${targetUrl} HTTP/1.1\r\nHost: ${targetUrl}\r\n\r\n`);
    });

    socket.on('data', (data) => {
        console.log('Received from proxy:', data.toString());
        // 这里可以根据返回的数据进一步处理
    });

    socket.on('close', () => {
        console.log('Connection closed');
    });

    socket.on('error', (err) => {
        console.error('Socket error:', err);
    });
}

// 使用代理服务器测试
testSocketProxy('socks5://your-proxy-server:port', 'www.example.com');

总结

以上代码展示了如何使用Node.js测试HTTP代理和Socket代理。你可以根据实际需求调整这些代码,并添加更多的错误处理和日志记录以提高健壮性。希望这对你的项目有所帮助!


http代理的例子:

var http = require('http');
var req = http.request({
  port: 8087,                         // 代理服务器端口
  hostname: '127.0.0.1',      // 代理服务器地址
  method: 'GET',                                     
  path: 'http://www.youtube.com:80'       // 要访问/测试的站点
}, function (res) {
  res.pipe(process.stdout);
}).on('error', function (err) {
  console.log('error: ' + err);
});
req.end();          // 发送请求

有没有scoket代理的了?

有没有大神在啊!

获取不到返回值,你有实例代码吗

有人会么

socket代理你要怎么用啦。。。。

用socket代理访问外网接口获取数据,同时进行socket代理连接的测试

可以实现类似QQ设置中测试HTTP代理与Socket代理连接的功能。下面分别用Node.js来实现这两个功能。

HTTP代理测试

你可以使用axiosrequest等库来测试HTTP代理是否可用。这里我们使用axios库进行示范:

  1. 安装axios:

    npm install axios
    
  2. 示例代码:

    const axios = require('axios');
    
    async function testHttpProxy(proxyUrl, targetUrl) {
        try {
            const response = await axios({
                method: 'get',
                url: targetUrl,
                proxy: {
                    host: new URL(proxyUrl).hostname,
                    port: new URL(proxyUrl).port,
                    auth: {
                        username: new URL(proxyUrl).username || '',
                        password: new URL(proxyUrl).password || ''
                    }
                }
            });
            console.log(`HTTP Proxy at ${proxyUrl} is working. Response status: ${response.status}`);
        } catch (error) {
            console.error(`Failed to connect to HTTP Proxy at ${proxyUrl}: ${error.message}`);
        }
    }
    
    // 使用示例
    testHttpProxy('http://your-proxy-url.com:8080', 'https://www.example.com');
    

Socket代理测试

对于Socket代理,你可以使用net模块来创建一个TCP连接并测试其是否可以通过代理服务器成功建立连接。以下是示例代码:

const net = require('net');

async function testSocketProxy(proxyHost, proxyPort, targetHost, targetPort) {
    return new Promise((resolve, reject) => {
        const socket = new net.Socket();
        
        socket.setTimeout(5000); // 设置超时时间
        
        socket.on('connect', () => {
            resolve(true);
            socket.end(); // 结束连接
        });

        socket.on('timeout', () => {
            socket.destroy();
            reject(new Error('Connection timed out'));
        });

        socket.on('error', (err) => {
            reject(err);
        });

        socket.connect(proxyPort, proxyHost, () => {
            // 发送代理请求
            socket.write(
                `CONNECT ${targetHost}:${targetPort} HTTP/1.1\r\n` +
                `Host: ${targetHost}:${targetPort}\r\n` +
                `\r\n`
            );
        });
    });
}

// 使用示例
testSocketProxy('your-proxy-host.com', 8080, 'example.com', 443)
    .then(() => console.log('Socket Proxy is working'))
    .catch(err => console.error(`Failed to connect to Socket Proxy: ${err.message}`));

上述代码展示了如何通过HTTP和Socket代理进行网络请求。您可以根据自己的需求调整这些代码,并添加更多的错误处理逻辑以提高程序的健壮性。

回到顶部