{"id":823,"date":"2025-11-19T12:03:05","date_gmt":"2025-11-19T04:03:05","guid":{"rendered":"https:\/\/help.ipnut.com\/?post_type=docs&#038;p=823"},"modified":"2025-11-23T18:29:19","modified_gmt":"2025-11-23T10:29:19","password":"","slug":"node-js-integration-demo-ipnut-proxy-configuration-via-node-js","status":"publish","type":"docs","link":"https:\/\/www.ipnut.com\/help\/development-documentation\/node-js-integration-demo-ipnut-proxy-configuration-via-node-js\/","title":{"rendered":"Node.js Integration Demo IPNut Proxy Configuration via Node.js"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"823\" class=\"elementor elementor-823\" 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 class=\"ds-markdown-paragraph\">After purchasing static IP services from IPNut platform, use the following Node.js code samples for integration.<\/p><hr \/>\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 Proxy Implementation\nsocks5-proxy-demo.js<\/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 * IPNut SOCKS5 Proxy Integration Demo\r\n *\/\r\n\r\nimport axios from 'axios';\r\nimport { SocksProxyAgent } from 'socks-proxy-agent';\r\nimport http from 'http';\r\nimport https from '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        \/\/ Build SOCKS5 proxy URL\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        console.log('\ud83d\udd27 SOCKS5 Proxy Configuration:', {\r\n            host: this.proxyHost,\r\n            port: this.proxyPort,\r\n            protocol: 'SOCKS5'\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * SOCKS5 Proxy with Axios\r\n     *\/\r\n    async socks5WithAxios() {\r\n        console.log('=== SOCKS5 Proxy with Axios ===');\r\n\r\n        try {\r\n            const response = await axios.get('https:\/\/httpbin.org\/ip', {\r\n                httpAgent: this.socksAgent,\r\n                httpsAgent: this.socksAgent,\r\n                timeout: 30000,\r\n                headers: {\r\n                    'User-Agent': 'IPNut-Node-SOCKS5\/1.0',\r\n                    'Accept': 'application\/json'\r\n                }\r\n            });\r\n\r\n            console.log('\u2705 Status Code:', response.status);\r\n            console.log('\ud83d\udce6 Response Data:', response.data);\r\n            return response.data;\r\n\r\n        } catch (error) {\r\n            console.error('\u274c Request failed:', error.message);\r\n            throw error;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * Multiple requests through SOCKS5 proxy\r\n     *\/\r\n    async socks5MultipleRequests() {\r\n        console.log('\\n=== SOCKS5 Multiple Requests ===');\r\n\r\n        const urls = [\r\n            'https:\/\/httpbin.org\/ip',\r\n            'https:\/\/httpbin.org\/user-agent',\r\n            'https:\/\/httpbin.org\/headers'\r\n        ];\r\n\r\n        const results = [];\r\n\r\n        for (let i = 0; i < urls.length; i++) {\r\n            console.log(`\\n\ud83d\udd04 Request ${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': 'IPNut-Node-Multi\/1.0',\r\n                        'X-Request-ID': `socks5-${i + 1}`\r\n                    }\r\n                });\r\n\r\n                console.log('\u2705 Status Code:', response.status);\r\n                console.log('\ud83d\udccb Response Preview:', \r\n                    JSON.stringify(response.data).substring(0, 120) + '...');\r\n\r\n                results.push({ success: true, data: response.data });\r\n                \r\n                \/\/ Rate limiting\r\n                await new Promise(resolve => setTimeout(resolve, 1000));\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Request failed:', error.message);\r\n                results.push({ success: false, error: error.message });\r\n            }\r\n        }\r\n\r\n        return results;\r\n    }\r\n\r\n    \/**\r\n     * SOCKS5 Proxy with custom POST request\r\n     *\/\r\n    async socks5CustomRequest() {\r\n        console.log('\\n=== SOCKS5 Custom POST Request ===');\r\n\r\n        try {\r\n            const postData = {\r\n                service: 'IPNut Proxy',\r\n                protocol: 'SOCKS5',\r\n                timestamp: new Date().toISOString(),\r\n                features: ['static_ip', 'high_anonymity', 'enterprise_grade'],\r\n                test_id: Math.random().toString(36).substring(7)\r\n            };\r\n\r\n            const response = await axios.post(\r\n                'https:\/\/httpbin.org\/post',\r\n                postData,\r\n                {\r\n                    httpAgent: this.socksAgent,\r\n                    httpsAgent: this.socksAgent,\r\n                    timeout: 30000,\r\n                    headers: {\r\n                        'User-Agent': 'IPNut-Node-POST\/1.0',\r\n                        'Content-Type': 'application\/json',\r\n                        'Accept': 'application\/json',\r\n                        'X-Proxy-Type': 'SOCKS5'\r\n                    }\r\n                }\r\n            );\r\n\r\n            console.log('\u2705 Status Code:', response.status);\r\n            console.log('\ud83d\udce8 POST Response Summary:');\r\n            console.log('   - Headers Received:', Object.keys(response.data.headers || {}).length);\r\n            console.log('   - Data Validated:', !!response.data.json);\r\n            console.log('   - Origin IP:', response.data.origin);\r\n\r\n            return response.data;\r\n\r\n        } catch (error) {\r\n            console.error('\u274c POST request failed:', error.message);\r\n            throw error;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * SOCKS5 Proxy with native HTTP module\r\n     *\/\r\n    async socks5WithHttpModule() {\r\n        console.log('\\n=== SOCKS5 with Native HTTP Module ===');\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': 'IPNut-Node-Native\/1.0',\r\n                    'Accept': 'application\/json',\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('\u2705 Status Code:', res.statusCode);\r\n                console.log('\ud83d\udccb Response Headers:', 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('\ud83d\udce6 Response Body:', data);\r\n                    resolve(data);\r\n                });\r\n            });\r\n\r\n            req.on('error', (error) => {\r\n                console.error('\u274c Request error:', error.message);\r\n                reject(error);\r\n            });\r\n\r\n            req.setTimeout(30000, () => {\r\n                req.destroy();\r\n                console.error('\u274c Request timeout');\r\n                reject(new Error('Request timeout'));\r\n            });\r\n\r\n            req.end();\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * Advanced SOCKS5 configuration with error handling\r\n     *\/\r\n    async socks5Advanced() {\r\n        console.log('\\n=== SOCKS5 Advanced Configuration ===');\r\n\r\n        try {\r\n            \/\/ Custom agent with additional options\r\n            const advancedAgent = new SocksProxyAgent(this.proxyUrl, {\r\n                timeout: 30000,\r\n                keepAlive: true\r\n            });\r\n\r\n            const response = await axios.get('https:\/\/httpbin.org\/anything', {\r\n                httpAgent: advancedAgent,\r\n                httpsAgent: advancedAgent,\r\n                timeout: 30000,\r\n                headers: {\r\n                    'User-Agent': 'IPNut-Advanced-Client\/1.0',\r\n                    'Accept': 'application\/json',\r\n                    'X-Custom-Header': 'socks5-test',\r\n                    'X-Client-Version': '1.0.0'\r\n                },\r\n                params: {\r\n                    test: 'ipnut_proxy',\r\n                    timestamp: Date.now()\r\n                }\r\n            });\r\n\r\n            console.log('\u2705 Advanced Request Completed');\r\n            console.log('\ud83d\udcca Response Metrics:');\r\n            console.log('   - Status Code:', response.status);\r\n            console.log('   - Response Size:', JSON.stringify(response.data).length, 'bytes');\r\n            console.log('   - Headers Count:', Object.keys(response.data.headers || {}).length);\r\n\r\n            return response.data;\r\n\r\n        } catch (error) {\r\n            console.error('\u274c Advanced request failed:', error.message);\r\n            throw error;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * Run all SOCKS5 demonstrations\r\n     *\/\r\n    async runAll() {\r\n        console.log('\ud83d\ude80 Starting IPNut SOCKS5 Proxy Tests...\\n');\r\n\r\n        try {\r\n            await this.socks5WithAxios();\r\n            await this.socks5MultipleRequests();\r\n            await this.socks5CustomRequest();\r\n            await this.socks5WithHttpModule();\r\n            await this.socks5Advanced();\r\n\r\n            console.log('\\n\ud83c\udf89 All SOCKS5 proxy tests completed successfully!');\r\n        } catch (error) {\r\n            console.error('\\n\ud83d\udca5 SOCKS5 tests completed with errors');\r\n        }\r\n    }\r\n}\r\n\r\n\/\/ Run SOCKS5 demo if executed directly\r\nif (import.meta.url === `file:\/\/${process.argv[1]}`) {\r\n    const socks5Demo = new Socks5ProxyDemo();\r\n    socks5Demo.runAll().catch(console.error);\r\n}\r\n\r\nexport { Socks5ProxyDemo };<\/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 Proxy Implementation\nhttp-proxy-demo.js<\/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 * IPNut HTTP Proxy Integration Demo\r\n *\/\r\n\r\nimport axios from 'axios';\r\nimport { HttpsProxyAgent } from 'https-proxy-agent';\r\nimport http from 'http';\r\nimport https from '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        \/\/ Build HTTP proxy URL\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        console.log('\ud83d\udd27 HTTP Proxy Configuration:', {\r\n            host: this.proxyHost,\r\n            port: this.proxyPort,\r\n            protocol: 'HTTP'\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * HTTP Proxy with Axios\r\n     *\/\r\n    async httpWithAxios() {\r\n        console.log('=== HTTP Proxy with Axios ===');\r\n\r\n        try {\r\n            const response = await axios.get('https:\/\/httpbin.org\/ip', {\r\n                httpsAgent: this.httpAgent,\r\n                timeout: 30000,\r\n                headers: {\r\n                    'User-Agent': 'IPNut-Node-HTTP\/1.0',\r\n                    'Accept': 'application\/json'\r\n                }\r\n            });\r\n\r\n            console.log('\u2705 Status Code:', response.status);\r\n            console.log('\ud83d\udce6 Response Data:', response.data);\r\n            return response.data;\r\n\r\n        } catch (error) {\r\n            console.error('\u274c Request failed:', error.message);\r\n            throw error;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * HTTP Proxy with concurrent requests\r\n     *\/\r\n    async httpMultipleRequests() {\r\n        console.log('\\n=== HTTP Proxy Concurrent Requests ===');\r\n\r\n        const urls = [\r\n            'https:\/\/httpbin.org\/ip',\r\n            'https:\/\/httpbin.org\/user-agent',\r\n            'https:\/\/httpbin.org\/headers',\r\n            'https:\/\/httpbin.org\/get?test=ipnut_proxy'\r\n        ];\r\n\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': 'IPNut-Node-Concurrent\/1.0',\r\n                    'X-Request-ID': `http-${index + 1}`\r\n                }\r\n            }).then(response => {\r\n                console.log(`\\n\u2705 Request ${index + 1}: ${url}`);\r\n                console.log('   Status Code:', response.status);\r\n                console.log('   Data Preview:', \r\n                    JSON.stringify(response.data).substring(0, 100) + '...');\r\n                return { success: true, data: response.data };\r\n            }).catch(error => {\r\n                console.log(`\\n\u274c Request ${index + 1} failed:`, error.message);\r\n                return { success: false, error: error.message };\r\n            })\r\n        );\r\n\r\n        const results = await Promise.all(requests);\r\n        console.log(`\\n\ud83d\udcca Concurrent Requests Summary: ${results.filter(r => r.success).length}\/${urls.length} successful`);\r\n        return results;\r\n    }\r\n\r\n    \/**\r\n     * HTTP Proxy POST with JSON data\r\n     *\/\r\n    async httpPostRequest() {\r\n        console.log('\\n=== HTTP Proxy POST Request ===');\r\n\r\n        try {\r\n            const postData = {\r\n                service: 'IPNut HTTP Proxy',\r\n                protocol: 'HTTP',\r\n                authentication: 'basic_auth',\r\n                timestamp: new Date().toISOString(),\r\n                test_payload: {\r\n                    feature: 'static_residential_ip',\r\n                    performance: 'high_speed',\r\n                    reliability: 'enterprise_grade'\r\n                }\r\n            };\r\n\r\n            const response = await axios.post(\r\n                'https:\/\/httpbin.org\/post',\r\n                postData,\r\n                {\r\n                    httpsAgent: this.httpAgent,\r\n                    timeout: 30000,\r\n                    headers: {\r\n                        'User-Agent': 'IPNut-Node-HTTP-POST\/1.0',\r\n                        'Content-Type': 'application\/json',\r\n                        'Accept': 'application\/json',\r\n                        'X-API-Version': '1.0'\r\n                    }\r\n                }\r\n            );\r\n\r\n            console.log('\u2705 POST Request Completed');\r\n            console.log('\ud83d\udce8 Response Details:');\r\n            console.log('   - Status Code:', response.status);\r\n            console.log('   - Data Validated:', !!response.data.json);\r\n            console.log('   - Headers Count:', Object.keys(response.data.headers || {}).length);\r\n            console.log('   - Origin IP:', response.data.origin);\r\n\r\n            return response.data;\r\n\r\n        } catch (error) {\r\n            console.error('\u274c POST request failed:', error.message);\r\n            throw error;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * HTTP Proxy with native HTTPS module\r\n     *\/\r\n    async httpWithHttpsModule() {\r\n        console.log('\\n=== HTTP Proxy with Native HTTPS Module ===');\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': 'IPNut-Node-HTTPS\/1.0',\r\n                    'Accept': 'application\/json'\r\n                },\r\n                rejectUnauthorized: true\r\n            };\r\n\r\n            const req = https.request(options, (res) => {\r\n                let data = '';\r\n\r\n                console.log('\u2705 Status Code:', res.statusCode);\r\n                console.log('\ud83d\udccb Response Headers:', Object.keys(res.headers).length, 'headers received');\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('\ud83d\udce6 Response Body:', data);\r\n                    resolve(data);\r\n                });\r\n            });\r\n\r\n            req.on('error', (error) => {\r\n                console.error('\u274c HTTPS request error:', error.message);\r\n                reject(error);\r\n            });\r\n\r\n            req.setTimeout(30000, () => {\r\n                req.destroy();\r\n                console.error('\u274c HTTPS request timeout');\r\n                reject(new Error('Request timeout'));\r\n            });\r\n\r\n            req.end();\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * HTTP Proxy streaming request\r\n     *\/\r\n    async httpStreamRequest() {\r\n        console.log('\\n=== HTTP Proxy Streaming Request ===');\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\/5',\r\n                method: 'GET',\r\n                agent: this.httpAgent,\r\n                headers: {\r\n                    'User-Agent': 'IPNut-Node-Stream\/1.0',\r\n                    'Accept': 'application\/json'\r\n                }\r\n            };\r\n\r\n            let chunkCount = 0;\r\n\r\n            const req = http.request(options, (res) => {\r\n                console.log('\u2705 Stream Connected - Status Code:', res.statusCode);\r\n\r\n                res.setEncoding('utf8');\r\n                res.on('data', (chunk) => {\r\n                    chunkCount++;\r\n                    console.log(`\ud83d\udce6 Chunk ${chunkCount}:`, chunk.toString().trim());\r\n                });\r\n\r\n                res.on('end', () => {\r\n                    console.log(`\ud83c\udf89 Stream ended - ${chunkCount} chunks received`);\r\n                    resolve(chunkCount);\r\n                });\r\n            });\r\n\r\n            req.on('error', (error) => {\r\n                console.error('\u274c Stream request error:', error.message);\r\n                reject(error);\r\n            });\r\n\r\n            req.end();\r\n        });\r\n    }\r\n\r\n    \/**\r\n     * Run all HTTP demonstrations\r\n     *\/\r\n    async runAll() {\r\n        console.log('\ud83d\ude80 Starting IPNut HTTP Proxy Tests...\\n');\r\n\r\n        try {\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('\\n\ud83c\udf89 All HTTP proxy tests completed successfully!');\r\n        } catch (error) {\r\n            console.error('\\n\ud83d\udca5 HTTP tests completed with errors');\r\n        }\r\n    }\r\n}\r\n\r\n\/\/ Run HTTP demo if executed directly\r\nif (import.meta.url === `file:\/\/${process.argv[1]}`) {\r\n    const httpDemo = new HttpProxyDemo();\r\n    httpDemo.runAll().catch(console.error);\r\n}\r\n\r\nexport { HttpProxyDemo };<\/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. Connectivity Testing Utility\nproxy-test-tool.js<\/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 * IPNut Proxy Connectivity Testing Tool\r\n *\/\r\n\r\nimport axios from 'axios';\r\nimport { SocksProxyAgent } from 'socks-proxy-agent';\r\nimport { HttpsProxyAgent } from '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     * Test SOCKS5 proxy connectivity\r\n     *\/\r\n    async testSocks5Proxy() {\r\n        console.log('\ud83d\udd0d Testing SOCKS5 Proxy Connectivity:');\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 startTime = Date.now();\r\n            const response = await axios.get('https:\/\/httpbin.org\/ip', {\r\n                httpAgent: socksAgent,\r\n                httpsAgent: socksAgent,\r\n                timeout: 15000,\r\n                headers: {\r\n                    'User-Agent': 'IPNut-Connectivity-Test\/1.0'\r\n                }\r\n            });\r\n\r\n            const responseTime = Date.now() - startTime;\r\n\r\n            console.log('\u2705 SOCKS5 Proxy Connection Successful');\r\n            console.log('   \ud83d\udcca Status Code:', response.status);\r\n            console.log('   \u26a1 Response Time:', responseTime + 'ms');\r\n            console.log('   \ud83c\udf10 Assigned IP:', response.data.origin);\r\n            console.log('   \ud83d\udd17 Protocol: SOCKS5');\r\n\r\n            return { success: true, responseTime, data: response.data };\r\n\r\n        } catch (error) {\r\n            console.log('\u274c SOCKS5 Proxy Connection Failed:', error.message);\r\n            return { success: false, error: error.message };\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * Test HTTP proxy connectivity\r\n     *\/\r\n    async testHttpProxy() {\r\n        console.log('\\n\ud83d\udd0d Testing HTTP Proxy Connectivity:');\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 startTime = Date.now();\r\n            const response = await axios.get('https:\/\/httpbin.org\/ip', {\r\n                httpsAgent: httpAgent,\r\n                timeout: 15000,\r\n                headers: {\r\n                    'User-Agent': 'IPNut-Connectivity-Test\/1.0'\r\n                }\r\n            });\r\n\r\n            const responseTime = Date.now() - startTime;\r\n\r\n            console.log('\u2705 HTTP Proxy Connection Successful');\r\n            console.log('   \ud83d\udcca Status Code:', response.status);\r\n            console.log('   \u26a1 Response Time:', responseTime + 'ms');\r\n            console.log('   \ud83c\udf10 Assigned IP:', response.data.origin);\r\n            console.log('   \ud83d\udd17 Protocol: HTTP');\r\n\r\n            return { success: true, responseTime, data: response.data };\r\n\r\n        } catch (error) {\r\n            console.log('\u274c HTTP Proxy Connection Failed:', error.message);\r\n            return { success: false, error: error.message };\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * Comprehensive proxy testing\r\n     *\/\r\n    async comprehensiveTest() {\r\n        console.log('\\n=== \ud83d\udd27 Comprehensive Proxy Test ===');\r\n\r\n        const testUrls = [\r\n            'https:\/\/httpbin.org\/ip',\r\n            'https:\/\/httpbin.org\/user-agent',\r\n            'https:\/\/httpbin.org\/headers'\r\n        ];\r\n\r\n        const proxyTypes = [\r\n            { name: 'SOCKS5', agent: SocksProxyAgent },\r\n            { name: 'HTTP', agent: HttpsProxyAgent }\r\n        ];\r\n\r\n        const results = [];\r\n\r\n        for (const proxyType of proxyTypes) {\r\n            console.log(`\\n\ud83d\udce1 Testing ${proxyType.name} Proxy:`);\r\n\r\n            for (const testUrl of testUrls) {\r\n                const proxyUrl = proxyType.name === 'SOCKS5' \r\n                    ? `socks5:\/\/${this.proxyUsername}:${this.proxyPassword}@${this.proxyHost}:${this.proxyPort}`\r\n                    : `http:\/\/${this.proxyUsername}:${this.proxyPassword}@${this.proxyHost}:${this.proxyPort}`;\r\n\r\n                const agent = new proxyType.agent(proxyUrl);\r\n\r\n                try {\r\n                    const config = proxyType.name === 'SOCKS5' \r\n                        ? { httpAgent: agent, httpsAgent: agent }\r\n                        : { httpsAgent: agent };\r\n\r\n                    const response = await axios.get(testUrl, {\r\n                        ...config,\r\n                        timeout: 10000\r\n                    });\r\n\r\n                    const success = response.status === 200;\r\n                    console.log(`  ${success ? '\u2705' : '\u274c'} ${testUrl} - ${success ? 'Success' : `HTTP ${response.status}`}`);\r\n                    \r\n                    results.push({\r\n                        protocol: proxyType.name,\r\n                        url: testUrl,\r\n                        success,\r\n                        status: response.status\r\n                    });\r\n\r\n                } catch (error) {\r\n                    console.log(`  \u274c ${testUrl} - Failed: ${error.message}`);\r\n                    results.push({\r\n                        protocol: proxyType.name,\r\n                        url: testUrl,\r\n                        success: false,\r\n                        error: error.message\r\n                    });\r\n                }\r\n            }\r\n        }\r\n\r\n        \/\/ Summary\r\n        const successfulTests = results.filter(r => r.success).length;\r\n        const totalTests = results.length;\r\n        \r\n        console.log(`\\n\ud83d\udcc8 Test Summary: ${successfulTests}\/${totalTests} tests passed`);\r\n        \r\n        return results;\r\n    }\r\n\r\n    \/**\r\n     * Run all tests\r\n     *\/\r\n    async runTests() {\r\n        console.log('\ud83d\ude80 Starting IPNut Proxy Connectivity Tests...\\n');\r\n\r\n        await this.testSocks5Proxy();\r\n        await this.testHttpProxy();\r\n        await this.comprehensiveTest();\r\n\r\n        console.log('\\n\ud83c\udf89 All proxy connectivity tests completed!');\r\n    }\r\n}\r\n\r\n\/\/ Run test tool if executed directly\r\nif (import.meta.url === `file:\/\/${process.argv[1]}`) {\r\n    const testTool = new ProxyTestTool();\r\n    testTool.runTests().catch(console.error);\r\n}\r\n\r\nexport { ProxyTestTool };<\/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. Main Program Entry Point\nmain.js<\/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 * Main Program - IPNut Proxy Integration Demo\r\n *\/\r\n\r\nimport { Socks5ProxyDemo } from '.\/socks5-proxy-demo.js';\r\nimport { HttpProxyDemo } from '.\/http-proxy-demo.js';\r\nimport { ProxyTestTool } from '.\/proxy-test-tool.js';\r\n\r\nasync function main() {\r\n    console.log('\ud83c\udf10 IPNut Node.js Proxy Integration Demo');\r\n    console.log('======================================\\n');\r\n\r\n    \/\/ Display configuration\r\n    console.log('\ud83d\udd27 Proxy Configuration:');\r\n    console.log('   - Host: proxy.ipnut.com');\r\n    console.log('   - Port: 28001');\r\n    console.log('   - Protocols: SOCKS5, HTTP');\r\n    console.log('   - Authentication: Username\/Password\\n');\r\n\r\n    \/\/ Run connectivity tests first\r\n    console.log('\ud83e\uddea Phase 1: Connectivity Testing');\r\n    const testTool = new ProxyTestTool();\r\n    await testTool.runTests();\r\n\r\n    console.log('\\n' + '='.repeat(60) + '\\n');\r\n\r\n    \/\/ Run SOCKS5 proxy demonstrations\r\n    console.log('\ud83d\udd04 Phase 2: SOCKS5 Proxy Implementation');\r\n    const socks5Demo = new Socks5ProxyDemo();\r\n    await socks5Demo.runAll();\r\n\r\n    console.log('\\n' + '='.repeat(60) + '\\n');\r\n\r\n    \/\/ Run HTTP proxy demonstrations\r\n    console.log('\ud83c\udf10 Phase 3: HTTP Proxy Implementation');\r\n    const httpDemo = new HttpProxyDemo();\r\n    await httpDemo.runAll();\r\n\r\n    console.log('\\n' + '='.repeat(60));\r\n    console.log('\ud83c\udf89 All IPNut proxy integration demonstrations completed successfully!');\r\n    console.log('\ud83d\udca1 Next Steps:');\r\n    console.log('   - Replace demo credentials with your actual IPNut proxy details');\r\n    console.log('   - Implement error handling for production use');\r\n    console.log('   - Add monitoring and logging for connection health');\r\n    console.log('   - Consider connection pooling for high-volume applications');\r\n}\r\n\r\n\/\/ Run main program\r\nif (import.meta.url === `file:\/\/${process.argv[1]}`) {\r\n    main().catch(console.error);\r\n}\r\n\r\nexport { 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. Project Structure &amp; Setup\npackage.json<\/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\": \"ipnut-node-proxy-demo\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"IPNut SOCKS5 and HTTP Proxy Integration Demo\",\r\n  \"main\": \"main.js\",\r\n  \"type\": \"module\",\r\n  \"scripts\": {\r\n    \"start\": \"node main.js\",\r\n    \"socks5\": \"node socks5-proxy-demo.js\",\r\n    \"http\": \"node http-proxy-demo.js\",\r\n    \"test\": \"node proxy-test-tool.js\",\r\n    \"dev\": \"node --watch main.js\"\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\": [\r\n    \"ipnut\",\r\n    \"proxy\",\r\n    \"socks5\",\r\n    \"http\",\r\n    \"nodejs\"\r\n  ],\r\n  \"author\": \"IPNut Integration\",\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. Execution Commands<\/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># File structure:\n# node-proxy-demo\/\n# \u251c\u2500\u2500 socks5-proxy-demo.js    # SOCKS5 proxy demo\n# \u251c\u2500\u2500 http-proxy-demo.js      # HTTP proxy demo\n# \u251c\u2500\u2500 proxy-test-tool.js      # proxy test tool\n# \u251c\u2500\u2500 main.js                 # Main program entry\n# \u2514\u2500\u2500 package.json           # Dependency configuration\n\n# Navigate to project directory\ncd node-proxy-demo\n\n# Install dependencies\nnpm install\n\n# Run complete demonstration\nnpm start\n\n# Or run individual components:\nnpm run socks5    # SOCKS5 proxy only\nnpm run http      # HTTP proxy only  \nnpm run test      # Connectivity tests only\n\n# Development mode with file watching\nnpm run dev<\/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-8f3ba67 elementor-widget elementor-widget-text-editor\" data-id=\"8f3ba67\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Key Integration Notes:<\/p><ul><li><p class=\"ds-markdown-paragraph\">ES Modules: Uses modern ES module syntax<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Error Handling: Comprehensive error handling and logging<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Performance: Connection timeouts and concurrent request support<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Security: Proper credential management and SSL verification<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Monitoring: Response time tracking and success metrics<\/p><\/li><\/ul><p>Best Practices:<\/p><ol start=\"1\"><li><p class=\"ds-markdown-paragraph\">Environment Variables: Store credentials in environment variables for production<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Connection Pooling: Implement connection reuse for high-throughput applications<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Health Checks: Regular connectivity testing for proxy reliability<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Error Recovery: Implement retry mechanisms with exponential backoff<\/p><\/li><\/ol><hr \/><p class=\"ds-markdown-paragraph\">Technical Support<br \/>For integration assistance or location-specific requirements:<\/p><ul><li><p class=\"ds-markdown-paragraph\">Email:\u00a0Support@ipnut.com<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Live Chat: 24\/7 real-time support via official website<\/p><\/li><\/ul><p class=\"ds-markdown-paragraph\">*All code examples support both HTTP and SOCKS5 protocols with enterprise-grade authentication and security features.*<\/p>\t\t\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>After purchasing sta [&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":[45],"doc_tag":[],"class_list":["post-823","docs","type-docs","status-publish","hentry","doc_category-development-documentation"],"year_month":"2026-05","word_count":2471,"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":"Development Documentation","term_url":"https:\/\/help.ipnut.com\/docs\/development-documentation\/"}],"doc_tag_info":[],"lang":"en","translations":{"en":823,"cn":683},"knowledge_base_info":[],"knowledge_base_slug":[],"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/823","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=823"}],"version-history":[{"count":10,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/823\/revisions"}],"predecessor-version":[{"id":1137,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/823\/revisions\/1137"}],"wp:attachment":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/media?parent=823"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_category?post=823"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_tag?post=823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}