JavaScript/Node.js API代理示例

阅读模式

流程:提取 API → 解析 JSON → 处理错误 → 使用返回代理访问目标站。

提示

请将 apiUrl 替换为您自己的 API 提取链接。

原生 https + https-proxy-agent

1
const https = require('https');
2
const { request: httpsRequest } = https;
3
const HttpsProxyAgent = require('https-proxy-agent');
4
5
const apiUrl = 'http://ip.16yun.cn:817/myip/pl/<ORDER_ID>/?s=<ORDER_SIGN>&u=<USER>&format=json';
6
7
function fetchJson(url) {
8
return new Promise((resolve, reject) => {
9
https.get(url, (res) => {
10
let data = '';
11
res.on('data', (chunk) => (data += chunk));
12
res.on('end', () => {
13
if (res.statusCode !== 200) {
14
return reject(new Error(`API错误 ${res.statusCode}`));
15
}
16
try {
17
resolve(JSON.parse(data));
18
} catch (e) {
19
reject(e);
20
}
21
});
22
}).on('error', reject);
23
});
24
}
25
26
async function main() {
27
const arr = await fetchJson(apiUrl);
28
if (!Array.isArray(arr) || arr.length === 0) throw new Error('API 返回为空');
29
const { ip, port } = arr[0];
30
const agent = new HttpsProxyAgent(`http://${ip}:${port}`);
31
32
const req = httpsRequest('https://httpbin.org/ip', { agent }, (res) => {
33
let s = '';
34
res.on('data', (c) => (s += c));
35
res.on('end', () => console.log(s));
36
});
37
req.on('error', console.error);
38
req.end();
39
}
40
41
main().catch((e) => {
42
console.error(e.message);
43
process.exit(1);
44
});

axios

1
const axios = require('axios');
2
3
const apiUrl = 'http://ip.16yun.cn:817/myip/pl/<ORDER_ID>/?s=<ORDER_SIGN>&u=<USER>&format=json';
4
5
async function main() {
6
const apiResp = await axios.get(apiUrl, { timeout: 10000 });
7
const arr = apiResp.data;
8
if (!Array.isArray(arr) || arr.length === 0) throw new Error('API 返回为空');
9
const { ip, port } = arr[0];
10
11
const r = await axios.get('https://httpbin.org/ip', {
12
timeout: 10000,
13
proxy: { host: ip, port: Number(port) },
14
// 若需要用户名密码:proxy: { host: ip, port: Number(port), auth: { username, password } }
15
});
16
console.log(r.data);
17
}
18
19
main().catch((e) => {
20
console.error(e.message);
21
process.exit(1);
22
});

superagent

1
const request = require('superagent');
2
require('superagent-proxy')(request);
3
4
const apiUrl = 'http://ip.16yun.cn:817/myip/pl/<ORDER_ID>/?s=<ORDER_SIGN>&u=<USER>&format=json';
5
6
async function main() {
7
const apiResp = await request.get(apiUrl).timeout({ response: 10000 });
8
const arr = JSON.parse(apiResp.text);
9
if (!Array.isArray(arr) || arr.length === 0) throw new Error('API 返回为空');
10
const { ip, port } = arr[0];
11
12
const res = await request
13
.get('https://httpbin.org/ip')
14
.proxy(`http://${ip}:${port}`)
15
.timeout({ response: 10000 });
16
console.log(res.text);
17
}
18
19
main().catch((e) => {
20
console.error(e.message);
21
process.exit(1);
22
});