JavaScript/Node.js API代理示例
流程:提取 API → 解析 JSON → 处理错误 → 使用返回代理访问目标站。
提示
请将 apiUrl 替换为您自己的 API 提取链接。
原生 https + https-proxy-agent
1const https = require('https');2const { request: httpsRequest } = https;3const HttpsProxyAgent = require('https-proxy-agent');45const apiUrl = 'http://ip.16yun.cn:817/myip/pl/<ORDER_ID>/?s=<ORDER_SIGN>&u=<USER>&format=json';67function fetchJson(url) {8return new Promise((resolve, reject) => {9https.get(url, (res) => {10let data = '';11res.on('data', (chunk) => (data += chunk));12res.on('end', () => {13if (res.statusCode !== 200) {14return reject(new Error(`API错误 ${res.statusCode}`));15}16try {17resolve(JSON.parse(data));18} catch (e) {19reject(e);20}21});22}).on('error', reject);23});24}2526async function main() {27const arr = await fetchJson(apiUrl);28if (!Array.isArray(arr) || arr.length === 0) throw new Error('API 返回为空');29const { ip, port } = arr[0];30const agent = new HttpsProxyAgent(`http://${ip}:${port}`);3132const req = httpsRequest('https://httpbin.org/ip', { agent }, (res) => {33let s = '';34res.on('data', (c) => (s += c));35res.on('end', () => console.log(s));36});37req.on('error', console.error);38req.end();39}4041main().catch((e) => {42console.error(e.message);43process.exit(1);44});
axios
1const axios = require('axios');23const apiUrl = 'http://ip.16yun.cn:817/myip/pl/<ORDER_ID>/?s=<ORDER_SIGN>&u=<USER>&format=json';45async function main() {6const apiResp = await axios.get(apiUrl, { timeout: 10000 });7const arr = apiResp.data;8if (!Array.isArray(arr) || arr.length === 0) throw new Error('API 返回为空');9const { ip, port } = arr[0];1011const r = await axios.get('https://httpbin.org/ip', {12timeout: 10000,13proxy: { host: ip, port: Number(port) },14// 若需要用户名密码:proxy: { host: ip, port: Number(port), auth: { username, password } }15});16console.log(r.data);17}1819main().catch((e) => {20console.error(e.message);21process.exit(1);22});
superagent
1const request = require('superagent');2require('superagent-proxy')(request);34const apiUrl = 'http://ip.16yun.cn:817/myip/pl/<ORDER_ID>/?s=<ORDER_SIGN>&u=<USER>&format=json';56async function main() {7const apiResp = await request.get(apiUrl).timeout({ response: 10000 });8const arr = JSON.parse(apiResp.text);9if (!Array.isArray(arr) || arr.length === 0) throw new Error('API 返回为空');10const { ip, port } = arr[0];1112const res = await request13.get('https://httpbin.org/ip')14.proxy(`http://${ip}:${port}`)15.timeout({ response: 10000 });16console.log(res.text);17}1819main().catch((e) => {20console.error(e.message);21process.exit(1);22});