{"id":683,"date":"2025-11-19T12:03:05","date_gmt":"2025-11-19T04:03:05","guid":{"rendered":"https:\/\/help.ipnut.com\/?post_type=docs&#038;p=683"},"modified":"2025-12-03T17:49:51","modified_gmt":"2025-12-03T09:49:51","password":"","slug":"tong-guo-node-js-yu-yan-jie-ru-dai-ma-demo","status":"publish","type":"docs","link":"https:\/\/www.ipnut.com\/cn\/help\/kai-fa-wen-dang\/tong-guo-node-js-yu-yan-jie-ru-dai-ma-demo\/","title":{"rendered":"\u901a\u8fc7node.js\u8bed\u8a00\u63a5\u5165\u4ee3\u7801Demo"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"683\" class=\"elementor elementor-683\" data-elementor-post-type=\"docs\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6183bed e-flex e-con-boxed e-con e-parent\" data-id=\"6183bed\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e0b159c elementor-widget elementor-widget-text-editor\" data-id=\"e0b159c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>\u901a\u8fc7node.js\u8bed\u8a00\u914d\u7f6eIPNut \u4ee3\u7406\uff1a<\/p><p>\u8fdb\u5165 <strong><a href=\"https:\/\/www.ipnut.com\/cn\/\" target=\"_blank\" rel=\"noopener nofollow\">IPNut<\/a><\/strong> \u5e73\u53f0\u8d2d\u4e70\u5e76\u83b7\u53d6\u4fe1\u606f\uff0c\u8fd9\u91cc\u4ee5\u9759\u6001IP\u4e3a\u4f8b\uff08\u5047\u5982\u7aef\u53e3\u662f http:\/\/proxy.ipnut.com:28001\uff0c\u8d26\u53f7: ipnut\uff0c\u5bc6\u7801: 123456789\uff09\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0a33611 elementor-widget elementor-widget-heading\" data-id=\"0a33611\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">1. SOCKS5\u4ee3\u7406\u793a\u4f8b\u200b<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-805312d elementor-widget elementor-widget-code-highlight\" data-id=\"805312d\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/**\r\n * SOCKS5\u4ee3\u7406\u6f14\u793a\r\n *\/\r\n\r\nconst axios = require('axios');\r\nconst { SocksProxyAgent } = require('socks-proxy-agent');\r\nconst http = require('http');\r\nconst https = require('https');\r\n\r\nclass Socks5ProxyDemo {\r\n    constructor() {\r\n        this.proxyHost = 'proxy.ipnut.com';\r\n        this.proxyPort = 28001;\r\n        this.proxyUsername = 'ipnut';\r\n        this.proxyPassword = '123456789';\r\n        \r\n        \/\/ \u6784\u5efaSOCKS5\u4ee3\u7406URL\r\n        this.proxyUrl = `socks5:\/\/${this.proxyUsername}:${this.proxyPassword}@${this.proxyHost}:${this.proxyPort}`;\r\n        this.socksAgent = new SocksProxyAgent(this.proxyUrl);\r\n    }\r\n\r\n    \/**\r\n     * \u4f7f\u7528axios\u7684SOCKS5\u4ee3\u7406\r\n     *\/\r\n    async socks5WithAxios() {\r\n        console.log('=== \u4f7f\u7528axios\u7684SOCKS5\u4ee3\u7406 ===');\r\n        \r\n        try {\r\n            const response = await axios.get('http:\/\/httpbin.org\/ip', {\r\n                httpAgent: this.socksAgent,\r\n                httpsAgent: this.socksAgent,\r\n                timeout: 30000,\r\n                headers: {\r\n                    'User-Agent': 'Node.js-SOCKS5-Proxy\/1.0'\r\n                }\r\n            });\r\n\r\n            console.log('\u72b6\u6001\u7801:', response.status);\r\n            console.log('\u54cd\u5e94\u6570\u636e:', response.data);\r\n            \r\n        } catch (error) {\r\n            console.error('\u8bf7\u6c42\u5931\u8d25:', error.message);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * SOCKS5\u4ee3\u7406\u591a\u8bf7\u6c42\u6f14\u793a\r\n     *\/\r\n    async socks5MultipleRequests() {\r\n        console.log('\\n=== SOCKS5\u4ee3\u7406\u591a\u8bf7\u6c42\u6f14\u793a ===');\r\n        \r\n        const urls = [\r\n            'http:\/\/httpbin.org\/ip',\r\n            'http:\/\/httpbin.org\/user-agent',\r\n            'http:\/\/httpbin.org\/headers'\r\n        ];\r\n\r\n        for (let i = 0; i < urls.length; i++) {\r\n            console.log(`\\n\u8bf7\u6c42 ${i + 1}: ${urls[i]}`);\r\n            \r\n            try {\r\n                const response = await axios.get(urls[i], {\r\n                    httpAgent: this.socksAgent,\r\n                    httpsAgent: this.socksAgent,\r\n                    timeout: 30000,\r\n                    headers: {\r\n                        'User-Agent': 'Node.js-SOCKS5-Multi\/1.0'\r\n                    }\r\n                });\r\n\r\n                console.log('\u72b6\u6001\u7801:', response.status);\r\n                console.log('\u54cd\u5e94\u6458\u8981:', JSON.stringify(response.data).substring(0, 150) + '...');\r\n                \r\n                \/\/ \u5ef6\u8fdf\u907f\u514d\u8bf7\u6c42\u8fc7\u5feb\r\n                await new Promise(resolve => setTimeout(resolve, 1000));\r\n                \r\n            } catch (error) {\r\n                console.error('\u8bf7\u6c42\u5931\u8d25:', error.message);\r\n            }\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * SOCKS5\u4ee3\u7406\u81ea\u5b9a\u4e49\u8bf7\u6c42\r\n     *\/\r\n    async socks5CustomRequest() {\r\n        console.log('\\n=== SOCKS5\u4ee3\u7406\u81ea\u5b9a\u4e49\u8bf7\u6c42 ===');\r\n        \r\n        try {\r\n            const response = await axios.post(\r\n                'https:\/\/httpbin.org\/post',\r\n                {\r\n                    name: 'ipnut_user',\r\n                    email: 'user@ipnut.com',\r\n                    message: '\u6d4b\u8bd5SOCKS5\u4ee3\u7406\u8fde\u63a5'\r\n                },\r\n                {\r\n                    httpAgent: this.socksAgent,\r\n                    httpsAgent: this.socksAgent,\r\n                    timeout: 30000,\r\n                    headers: {\r\n                        'User-Agent': 'Node.js-SOCKS5-POST\/1.0',\r\n                        'Content-Type': 'application\/json',\r\n                        'Accept': 'application\/json'\r\n                    }\r\n                }\r\n            );\r\n\r\n            console.log('\u72b6\u6001\u7801:', response.status);\r\n            console.log('\u54cd\u5e94\u6570\u636e:', JSON.stringify(response.data, null, 2));\r\n            \r\n        } catch (error) {\r\n            console.error('POST\u8bf7\u6c42\u5931\u8d25:', error.message);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u4f7f\u7528\u539f\u751fhttp\u6a21\u5757\u7684SOCKS5\u4ee3\u7406\r\n     *\/\r\n    socks5WithHttpModule() {\r\n        console.log('\\n=== \u4f7f\u7528\u539f\u751fhttp\u6a21\u5757\u7684SOCKS5\u4ee3\u7406 ===');\r\n        \r\n        return new Promise((resolve, reject) => {\r\n            const options = {\r\n                hostname: 'httpbin.org',\r\n                port: 80,\r\n                path: '\/ip',\r\n                method: 'GET',\r\n                agent: this.socksAgent,\r\n                headers: {\r\n                    'User-Agent': 'Node.js-HTTP-SOCKS5\/1.0',\r\n                    'Connection': 'close'\r\n                }\r\n            };\r\n\r\n            const req = http.request(options, (res) => {\r\n                let data = '';\r\n                \r\n                console.log('\u72b6\u6001\u7801:', res.statusCode);\r\n                console.log('\u54cd\u5e94\u5934:', res.headers);\r\n\r\n                res.on('data', (chunk) => {\r\n                    data += chunk;\r\n                });\r\n\r\n                res.on('end', () => {\r\n                    console.log('\u54cd\u5e94\u5185\u5bb9:', data);\r\n                    resolve(data);\r\n                });\r\n            });\r\n\r\n            req.on('error', (error) => {\r\n                console.error('\u8bf7\u6c42\u9519\u8bef:', error.message);\r\n                reject(error);\r\n            });\r\n\r\n            req.setTimeout(30000, () => {\r\n                req.destroy();\r\n                console.error('\u8bf7\u6c42\u8d85\u65f6');\r\n            });\r\n\r\n            req.end();\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * \u8fd0\u884c\u6240\u6709SOCKS5\u6f14\u793a\r\n     *\/\r\n    async runAll() {\r\n        console.log('\u5f00\u59cbSOCKS5\u4ee3\u7406\u6d4b\u8bd5...\\n');\r\n        \r\n        await this.socks5WithAxios();\r\n        await this.socks5MultipleRequests();\r\n        await this.socks5CustomRequest();\r\n        await this.socks5WithHttpModule();\r\n        \r\n        console.log('\\nSOCKS5\u4ee3\u7406\u6d4b\u8bd5\u5b8c\u6210!');\r\n    }\r\n}\r\n\r\n\/\/ \u8fd0\u884cSOCKS5\u6f14\u793a\r\nasync function runSocks5Demo() {\r\n    const socks5Demo = new Socks5ProxyDemo();\r\n    await socks5Demo.runAll();\r\n}\r\n\r\nmodule.exports = { Socks5ProxyDemo, runSocks5Demo };<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9dd4100 elementor-widget elementor-widget-heading\" data-id=\"9dd4100\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">2. HTTP\u4ee3\u7406\u793a\u4f8b<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c4bb13 elementor-widget elementor-widget-code-highlight\" data-id=\"2c4bb13\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/**\r\n * HTTP\u4ee3\u7406\u6f14\u793a\r\n *\/\r\n\r\nconst axios = require('axios');\r\nconst { HttpsProxyAgent } = require('https-proxy-agent');\r\nconst http = require('http');\r\nconst https = require('https');\r\n\r\nclass HttpProxyDemo {\r\n    constructor() {\r\n        this.proxyHost = 'proxy.ipnut.com';\r\n        this.proxyPort = 28001;\r\n        this.proxyUsername = 'ipnut';\r\n        this.proxyPassword = '123456789';\r\n        \r\n        \/\/ \u6784\u5efaHTTP\u4ee3\u7406URL\r\n        this.proxyUrl = `http:\/\/${this.proxyUsername}:${this.proxyPassword}@${this.proxyHost}:${this.proxyPort}`;\r\n        this.httpAgent = new HttpsProxyAgent(this.proxyUrl);\r\n    }\r\n\r\n    \/**\r\n     * \u4f7f\u7528axios\u7684HTTP\u4ee3\u7406\r\n     *\/\r\n    async httpWithAxios() {\r\n        console.log('=== \u4f7f\u7528axios\u7684HTTP\u4ee3\u7406 ===');\r\n        \r\n        try {\r\n            const response = await axios.get('http:\/\/httpbin.org\/ip', {\r\n                httpsAgent: this.httpAgent,\r\n                timeout: 30000,\r\n                headers: {\r\n                    'User-Agent': 'Node.js-HTTP-Proxy\/1.0'\r\n                }\r\n            });\r\n\r\n            console.log('\u72b6\u6001\u7801:', response.status);\r\n            console.log('\u54cd\u5e94\u6570\u636e:', response.data);\r\n            \r\n        } catch (error) {\r\n            console.error('\u8bf7\u6c42\u5931\u8d25:', error.message);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * HTTP\u4ee3\u7406\u591a\u8bf7\u6c42\u6f14\u793a\r\n     *\/\r\n    async httpMultipleRequests() {\r\n        console.log('\\n=== HTTP\u4ee3\u7406\u591a\u8bf7\u6c42\u6f14\u793a ===');\r\n        \r\n        const urls = [\r\n            'http:\/\/httpbin.org\/ip',\r\n            'http:\/\/httpbin.org\/user-agent',\r\n            'http:\/\/httpbin.org\/get?param1=value1&param2=value2'\r\n        ];\r\n\r\n        \/\/ \u4f7f\u7528Promise.all\u5e76\u53d1\u8bf7\u6c42\r\n        const requests = urls.map((url, index) => \r\n            axios.get(url, {\r\n                httpsAgent: this.httpAgent,\r\n                timeout: 30000,\r\n                headers: {\r\n                    'User-Agent': 'Node.js-HTTP-Multi\/1.0'\r\n                }\r\n            }).then(response => {\r\n                console.log(`\\n\u8bf7\u6c42 ${index + 1}: ${url}`);\r\n                console.log('\u72b6\u6001\u7801:', response.status);\r\n                console.log('\u54cd\u5e94\u6458\u8981:', JSON.stringify(response.data).substring(0, 150) + '...');\r\n                return response.data;\r\n            }).catch(error => {\r\n                console.log(`\\n\u8bf7\u6c42 ${index + 1}\u5931\u8d25:`, error.message);\r\n                return null;\r\n            })\r\n        );\r\n\r\n        await Promise.all(requests);\r\n    }\r\n\r\n    \/**\r\n     * HTTP\u4ee3\u7406POST\u8bf7\u6c42\r\n     *\/\r\n    async httpPostRequest() {\r\n        console.log('\\n=== HTTP\u4ee3\u7406POST\u8bf7\u6c42 ===');\r\n        \r\n        try {\r\n            const response = await axios.post(\r\n                'https:\/\/httpbin.org\/post',\r\n                {\r\n                    name: 'ipnut_user',\r\n                    email: 'user@ipnut.com',\r\n                    message: '\u6d4b\u8bd5HTTP\u4ee3\u7406POST\u8bf7\u6c42'\r\n                },\r\n                {\r\n                    httpsAgent: this.httpAgent,\r\n                    timeout: 30000,\r\n                    headers: {\r\n                        'User-Agent': 'Node.js-HTTP-POST\/1.0',\r\n                        'Content-Type': 'application\/json'\r\n                    }\r\n                }\r\n            );\r\n\r\n            console.log('\u72b6\u6001\u7801:', response.status);\r\n            console.log('\u54cd\u5e94\u6570\u636e:', JSON.stringify(response.data, null, 2));\r\n            \r\n        } catch (error) {\r\n            console.error('POST\u8bf7\u6c42\u5931\u8d25:', error.message);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u4f7f\u7528\u539f\u751fhttps\u6a21\u5757\u7684HTTP\u4ee3\u7406\r\n     *\/\r\n    httpWithHttpsModule() {\r\n        console.log('\\n=== \u4f7f\u7528\u539f\u751fhttps\u6a21\u5757\u7684HTTP\u4ee3\u7406 ===');\r\n        \r\n        return new Promise((resolve, reject) => {\r\n            const options = {\r\n                hostname: 'httpbin.org',\r\n                port: 443,\r\n                path: '\/ip',\r\n                method: 'GET',\r\n                agent: this.httpAgent,\r\n                headers: {\r\n                    'User-Agent': 'Node.js-HTTPS-Proxy\/1.0',\r\n                    'Accept': 'application\/json'\r\n                },\r\n                rejectUnauthorized: false \/\/ \u4ec5\u6d4b\u8bd5\u4f7f\u7528\r\n            };\r\n\r\n            const req = https.request(options, (res) => {\r\n                let data = '';\r\n                \r\n                console.log('\u72b6\u6001\u7801:', res.statusCode);\r\n                console.log('\u54cd\u5e94\u5934:', res.headers);\r\n\r\n                res.on('data', (chunk) => {\r\n                    data += chunk;\r\n                });\r\n\r\n                res.on('end', () => {\r\n                    console.log('\u54cd\u5e94\u5185\u5bb9:', data);\r\n                    resolve(data);\r\n                });\r\n            });\r\n\r\n            req.on('error', (error) => {\r\n                console.error('\u8bf7\u6c42\u9519\u8bef:', error.message);\r\n                reject(error);\r\n            });\r\n\r\n            req.setTimeout(30000, () => {\r\n                req.destroy();\r\n                console.error('\u8bf7\u6c42\u8d85\u65f6');\r\n            });\r\n\r\n            req.end();\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * HTTP\u4ee3\u7406\u6d41\u5f0f\u8bf7\u6c42\r\n     *\/\r\n    async httpStreamRequest() {\r\n        console.log('\\n=== HTTP\u4ee3\u7406\u6d41\u5f0f\u8bf7\u6c42 ===');\r\n        \r\n        return new Promise((resolve, reject) => {\r\n            const options = {\r\n                hostname: 'httpbin.org',\r\n                port: 80,\r\n                path: '\/stream\/3',\r\n                method: 'GET',\r\n                agent: this.httpAgent,\r\n                headers: {\r\n                    'User-Agent': 'Node.js-HTTP-Stream\/1.0'\r\n                }\r\n            };\r\n\r\n            const req = http.request(options, (res) => {\r\n                console.log('\u72b6\u6001\u7801:', res.statusCode);\r\n                console.log('\u6d41\u5f0f\u54cd\u5e94:');\r\n                \r\n                res.setEncoding('utf8');\r\n                res.on('data', (chunk) => {\r\n                    console.log('\u6536\u5230\u6570\u636e\u5757:', chunk.toString());\r\n                });\r\n\r\n                res.on('end', () => {\r\n                    console.log('\u6d41\u7ed3\u675f');\r\n                    resolve();\r\n                });\r\n            });\r\n\r\n            req.on('error', (error) => {\r\n                console.error('\u6d41\u8bf7\u6c42\u9519\u8bef:', error.message);\r\n                reject(error);\r\n            });\r\n\r\n            req.end();\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * \u8fd0\u884c\u6240\u6709HTTP\u6f14\u793a\r\n     *\/\r\n    async runAll() {\r\n        console.log('\u5f00\u59cbHTTP\u4ee3\u7406\u6d4b\u8bd5...\\n');\r\n        \r\n        await this.httpWithAxios();\r\n        await this.httpMultipleRequests();\r\n        await this.httpPostRequest();\r\n        await this.httpWithHttpsModule();\r\n        await this.httpStreamRequest();\r\n        \r\n        console.log('\\nHTTP\u4ee3\u7406\u6d4b\u8bd5\u5b8c\u6210!');\r\n    }\r\n}\r\n\r\n\/\/ \u8fd0\u884cHTTP\u6f14\u793a\r\nasync function runHttpDemo() {\r\n    const httpDemo = new HttpProxyDemo();\r\n    await httpDemo.runAll();\r\n}\r\n\r\nmodule.exports = { HttpProxyDemo, runHttpDemo };<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-71b941a elementor-widget elementor-widget-heading\" data-id=\"71b941a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">3. \u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0db3318 elementor-widget elementor-widget-code-highlight\" data-id=\"0db3318\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/**\r\n * \u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177\r\n *\/\r\n\r\nconst axios = require('axios');\r\nconst { SocksProxyAgent } = require('socks-proxy-agent');\r\nconst { HttpsProxyAgent } = require('https-proxy-agent');\r\n\r\nclass ProxyTestTool {\r\n    constructor() {\r\n        this.proxyHost = 'proxy.ipnut.com';\r\n        this.proxyPort = 28001;\r\n        this.proxyUsername = 'ipnut';\r\n        this.proxyPassword = '123456789';\r\n    }\r\n\r\n    \/**\r\n     * \u6d4b\u8bd5SOCKS5\u4ee3\u7406\r\n     *\/\r\n    async testSocks5Proxy() {\r\n        console.log('\u6d4b\u8bd5 SOCKS5 \u4ee3\u7406:');\r\n        \r\n        const proxyUrl = `socks5:\/\/${this.proxyUsername}:${this.proxyPassword}@${this.proxyHost}:${this.proxyPort}`;\r\n        const socksAgent = new SocksProxyAgent(proxyUrl);\r\n        \r\n        try {\r\n            const response = await axios.get('http:\/\/httpbin.org\/ip', {\r\n                httpAgent: socksAgent,\r\n                httpsAgent: socksAgent,\r\n                timeout: 15000\r\n            });\r\n\r\n            console.log('\u2705 SOCKS5 \u4ee3\u7406\u8fde\u63a5\u6210\u529f');\r\n            console.log('   \u72b6\u6001\u7801:', response.status);\r\n            console.log('   \u5f53\u524dIP:', response.data.origin);\r\n            \r\n        } catch (error) {\r\n            console.log('\u274c SOCKS5 \u4ee3\u7406\u8fde\u63a5\u5931\u8d25:', error.message);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u6d4b\u8bd5HTTP\u4ee3\u7406\r\n     *\/\r\n    async testHttpProxy() {\r\n        console.log('\\n\u6d4b\u8bd5 HTTP \u4ee3\u7406:');\r\n        \r\n        const proxyUrl = `http:\/\/${this.proxyUsername}:${this.proxyPassword}@${this.proxyHost}:${this.proxyPort}`;\r\n        const httpAgent = new HttpsProxyAgent(proxyUrl);\r\n        \r\n        try {\r\n            const response = await axios.get('http:\/\/httpbin.org\/ip', {\r\n                httpsAgent: httpAgent,\r\n                timeout: 15000\r\n            });\r\n\r\n            console.log('\u2705 HTTP \u4ee3\u7406\u8fde\u63a5\u6210\u529f');\r\n            console.log('   \u72b6\u6001\u7801:', response.status);\r\n            console.log('   \u5f53\u524dIP:', response.data.origin);\r\n            \r\n        } catch (error) {\r\n            console.log('\u274c HTTP \u4ee3\u7406\u8fde\u63a5\u5931\u8d25:', error.message);\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u8fd0\u884c\u6d4b\u8bd5\r\n     *\/\r\n    async runTests() {\r\n        console.log('=== \u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177 ===\\n');\r\n        \r\n        await this.testSocks5Proxy();\r\n        await this.testHttpProxy();\r\n        \r\n        console.log('\\n\u4ee3\u7406\u6d4b\u8bd5\u5b8c\u6210!');\r\n    }\r\n}\r\n\r\n\/\/ \u8fd0\u884c\u6d4b\u8bd5\u5de5\u5177\r\nasync function runProxyTests() {\r\n    const testTool = new ProxyTestTool();\r\n    await testTool.runTests();\r\n}\r\n\r\nmodule.exports = { ProxyTestTool, runProxyTests };<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6de9bf7 elementor-widget elementor-widget-heading\" data-id=\"6de9bf7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">4. \u4e3b\u7a0b\u5e8f\u6587\u4ef6<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e13987 elementor-widget elementor-widget-code-highlight\" data-id=\"5e13987\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/**\r\n * \u4e3b\u7a0b\u5e8f - \u4ee3\u7406\u6f14\u793a\u603b\u5165\u53e3\r\n *\/\r\n\r\nconst { runSocks5Demo } = require('.\/socks5-proxy-demo');\r\nconst { runHttpDemo } = require('.\/http-proxy-demo');\r\nconst { runProxyTests } = require('.\/proxy-test-tool');\r\n\r\nasync function main() {\r\n    console.log('Node.js\u4ee3\u7406\u8fde\u63a5\u6f14\u793a\u7a0b\u5e8f');\r\n    console.log('====================\\n');\r\n    \r\n    \/\/ \u8fd0\u884c\u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177\r\n    await runProxyTests();\r\n    \r\n    console.log('\\n' + '='.repeat(50) + '\\n');\r\n    \r\n    \/\/ \u8fd0\u884cSOCKS5\u6f14\u793a\r\n    await runSocks5Demo();\r\n    \r\n    console.log('\\n' + '='.repeat(50) + '\\n');\r\n    \r\n    \/\/ \u8fd0\u884cHTTP\u6f14\u793a\r\n    await runHttpDemo();\r\n    \r\n    console.log('\\n\u6240\u6709\u6f14\u793a\u5b8c\u6210!');\r\n}\r\n\r\n\/\/ \u8fd0\u884c\u4e3b\u7a0b\u5e8f\r\nif (require.main === module) {\r\n    main().catch(console.error);\r\n}\r\n\r\nmodule.exports = { main };<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-639fc11 elementor-widget elementor-widget-heading\" data-id=\"639fc11\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">5. Package.json \u6587\u4ef6<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-73e8afb elementor-widget elementor-widget-code-highlight\" data-id=\"73e8afb\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>{\r\n  \"name\": \"node-proxy-demo\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"Node.js SOCKS5 and HTTP proxy demo\",\r\n  \"main\": \"main.js\",\r\n  \"scripts\": {\r\n    \"start\": \"node main.js\",\r\n    \"socks5\": \"node -e \\\"require('.\/socks5-proxy-demo').runSocks5Demo()\\\"\",\r\n    \"http\": \"node -e \\\"require('.\/http-proxy-demo').runHttpDemo()\\\"\",\r\n    \"test\": \"node -e \\\"require('.\/proxy-test-tool').runProxyTests()\\\"\"\r\n  },\r\n  \"dependencies\": {\r\n    \"axios\": \"^1.6.0\",\r\n    \"socks-proxy-agent\": \"^8.0.2\",\r\n    \"https-proxy-agent\": \"^7.0.2\"\r\n  },\r\n  \"keywords\": [\"proxy\", \"socks5\", \"http\", \"nodejs\"],\r\n  \"author\": \"Demo\",\r\n  \"license\": \"MIT\"\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-99060b9 elementor-widget elementor-widget-heading\" data-id=\"99060b9\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">6. \u8fd0\u884c\u8bf4\u660e<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec4d7f0 elementor-widget elementor-widget-code-highlight\" data-id=\"ec4d7f0\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># \u6587\u4ef6\u7ed3\u6784\uff1a\n# node-proxy-demo\/\n# \u251c\u2500\u2500 socks5-proxy-demo.js    # SOCKS5\u4ee3\u7406\u6f14\u793a\n# \u251c\u2500\u2500 http-proxy-demo.js      # HTTP\u4ee3\u7406\u6f14\u793a\n# \u251c\u2500\u2500 proxy-test-tool.js      # \u4ee3\u7406\u6d4b\u8bd5\u5de5\u5177\n# \u251c\u2500\u2500 main.js                 # \u4e3b\u7a0b\u5e8f\u5165\u53e3\n# \u2514\u2500\u2500 package.json           # \u4f9d\u8d56\u914d\u7f6e\n\n# \u5b89\u88c5\u4f9d\u8d56\uff1a\nnpm install\n\n# \u8fd0\u884c\u65b9\u5f0f\uff1a\n# 1.\u8fd0\u884c\u5b8c\u6574\u6f14\u793a\uff1a\nnpm start\n# \u6216\nnode main.js\n\n# 2.\u5355\u72ec\u8fd0\u884cSOCKS5\u6f14\u793a\uff1a\nnpm run socks5\n\n# 3.\u5355\u72ec\u8fd0\u884cHTTP\u6f14\u793a\uff1a\nnpm run http\n\n# 4.\u8fd0\u884c\u6d4b\u8bd5\u5de5\u5177\uff1a\nnpm run test<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u901a\u8fc7node.js\u8bed\u8a00\u914d\u7f6eIPNut \u4ee3 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"doc_category":[43],"doc_tag":[112,61,114,77,88],"class_list":["post-683","docs","type-docs","status-publish","hentry","doc_category-kai-fa-wen-dang","doc_tag-ipv4","doc_tag-ip","doc_tag-isp","doc_tag-static-residential-cn","doc_tag-88"],"year_month":"2026-05","word_count":1255,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"admin","author_nicename":"admin","author_url":"https:\/\/help.ipnut.com\/author\/admin\/"},"doc_category_info":[{"term_name":"\u5f00\u53d1\u6587\u6863","term_url":"https:\/\/help.ipnut.com\/cn\/docs\/kai-fa-wen-dang\/"}],"doc_tag_info":[{"term_name":"IPv4","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/ipv4\/"},{"term_name":"IP\u4ee3\u7406","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/ip%e4%bb%a3%e7%90%86\/"},{"term_name":"ISP","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/isp\/"},{"term_name":"\u9759\u6001\u4f4f\u5b85","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/static-residential-cn\/"},{"term_name":"\u9759\u6001\u6570\u636e\u4e2d\u5fc3","term_url":"https:\/\/help.ipnut.com\/cn\/docs-tag\/%e9%9d%99%e6%80%81%e6%95%b0%e6%8d%ae%e4%b8%ad%e5%bf%83\/"}],"lang":"cn","translations":{"cn":683,"en":823},"knowledge_base_info":[],"knowledge_base_slug":[],"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/comments?post=683"}],"version-history":[{"count":10,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/683\/revisions"}],"predecessor-version":[{"id":716,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/683\/revisions\/716"}],"wp:attachment":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/media?parent=683"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_category?post=683"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_tag?post=683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}