Node.js 原生 fetch 使用代理:配置方法与代码示例

代理IP 2025-08-04 代理知识 246 0
A⁺AA⁻
国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内IP代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)

手把手教你用Node.js原生fetch挂代理

最近发现不少老铁在用Node.js写爬虫时,总卡在代理IP配置这个环节。今天咱们就唠唠怎么用原生fetch搭配ipipgo的代理ip服务,整点实战代码给你们参考。

Node.js 原生 fetch 使用代理:配置方法与代码示例

为什么非得用代理IP?

举个栗子,你让自家宽带连着某网站疯狂请求,分分钟就被识别成机器人。这时候代理IP就像个中间人,帮你把真实IP藏得严严实实。像ipipgo这种有9000万+住宅IP的服务商,每次请求都能换不同地区的真实家庭网络地址,比那些机房IP靠谱多了。

配置代理的两种野路子

先说个冷知识:Node.js原生的fetch其实底层用的是undici库。要挂代理的话,重点在创建自定义的HTTPAgent。这里推荐两种方法:

方法一:http-proxy-agent直接怼
import fetch from 'node-fetch';
import { HttpProxyAgent } from 'http-proxy-agent';

const agent = new HttpProxyAgent('http://username:password@proxy.ipipgo.com:8080');
方法二:undici自带的Agent更丝滑
import { fetch, Agent } from 'undici';

const agent = new Agent({
  connect: {
    proxy: 'http://proxy.ipipgo.com:3128',
    protocol: 'http'
  }
});

实战代码片段

假设要用ipipgo的动态住宅IP,记得把账号密码换成自己的认证信息。这里给个带重试机制的完整示例:

async function fetchWithProxy(url, retries = 3) {
  const controller = new AbortController();
  setTimeout(() => controller.abort(), 10000);

  try {
    return await fetch(url, {
      agent: new HttpProxyAgent('http://user123:pass456@dynamic.ipipgo.net:8888'),
      signal: controller.signal
    });
  } catch (e) {
    if(retries > 0) {
      console.log('换个IP重试...');
      return fetchWithProxy(url, retries - 1);
    }
    throw new Error('三次都挂了,检查代理配置吧');
  }
}

常见翻车现场QA

Q:证书报错咋整?
A:试试在agent配置里加rejectUnauthorized: false,但生产环境慎用

Q:代理响应太慢怎么办?
A:建议换IPipgo的静态住宅IP,他们家的专线延迟能压到200ms以内

Q:如何验证代理是否生效?
A:可以先用curl -x http://代理地址 https://API.ipipgo.com/ip测试连通性

为什么选ipipgo?

用过七八家代理服务商,最后锁死ipipgo就三点:一是他家支持socks5/http/https全协议,不用改代码就能无缝切换;二是动态IP池够大,实测连续请求100次都没重复IP;三是他们家的住宅IP都是实打实的家庭宽带,不像某些服务商拿机房IP充数。

最后说个骚操作:如果要做分布式采集,可以把ipipgo不同地区的代理IP做成配置数组,随机抽选使用。比如要采集欧洲数据,就专门调用他们法国、德国的住宅IP节点,这样成功率能直接翻倍。

国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内ip代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)

发表评论

发表评论:

扫一扫,添加您的专属销售

扫一扫,添加您的专属销售