
Node.js请求模块的基本使用
在Node.js中发送HTTP请求,最常用的就是axios和node-fetch这两个库。它们用起来简单直观,下面我分别介绍一下。
先说说axios,这是一个非常流行的HTTP客户端。安装很简单:
npm install axios
然后就可以这样发送GET请求:
const axios = require('axios');
async function getData() {
try {
const response = await axios.get('https://httpbin.org/ip');
console.log(response.data);
} catch (error) {
console.error('请求出错:', error.message);
}
}
getData();
再来看node-fetch,它的API跟浏览器里的fetch很像:
const fetch = require('node-fetch');
async function fetchData() {
try {
const response = await fetch('https://httpbin.org/ip');
const data = await response.json();
console.log(data);
} catch (error) {
console.error('请求失败:', error);
}
}
fetchData();
这两个库各有特点,axios功能更丰富一些,node-fetch更轻量。根据你的项目需求来选择就行。
为什么需要配置代理IP
在实际开发中,直接用自己的IP地址发送请求可能会遇到一些问题。比如:
- 目标网站有访问频率限制,同一个IP请求太频繁会被封
- 需要测试不同地区用户访问网站的效果
- 采集数据时避免被识别为爬虫
这时候就需要用到代理IP服务了。通过代理服务器转发请求,可以隐藏真实IP,避免被限制。像ipipgo这样的专业服务商提供高质量的代理IP,能很好地解决这些问题。
axios配置代理IP的详细方法
给axios配置代理其实很简单,主要有两种方式。
方法一:通过proxy配置项
const axios = require('axios');
const proxyConfig = {
host: 'proxy.ipipgo.com', // ipipgo代理服务器地址
port: 8000, // 代理端口
protocol: 'http'
};
async function requestWithProxy() {
try {
const response = await axios.get('https://httpbin.org/ip', {
proxy: proxyConfig
});
console.log('通过代理IP获取的数据:', response.data);
} catch (error) {
console.error('代理请求失败:', error.message);
}
}
requestWithProxy();
方法二:设置环境变量
如果你不想在代码里写死代理配置,可以设置环境变量:
// 在终端中设置
export HTTP_PROXY=http://proxy.ipipgo.com:8000
export HTTPS_PROXY=http://proxy.ipipgo.com:8000
然后axios会自动使用这些代理设置:
const axios = require('axios');
// 不需要额外配置,自动使用环境变量中的代理
axios.get('https://httpbin.org/ip')
.then(response => console.log(response.data))
.catch(error => console.error(error));
node-fetch的代理配置技巧
node-fetch本身不支持代理配置,但我们可以通过https-proxy-agent这个包来实现:
const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');
const proxyAgent = new HttpsProxyAgent('http://proxy.ipipgo.com:8000');
async function fetchWithProxy() {
try {
const response = await fetch('https://httpbin.org/ip', {
agent: proxyAgent
});
const data = await response.json();
console.log('使用代理获取的IP信息:', data);
} catch (error) {
console.error('请求错误:', error);
}
}
fetchWithProxy();
ipipgo代理IP服务推荐
在选择代理IP服务时,ipipgo是个很不错的选择。他们主要提供两种类型的住宅代理:
| 代理类型 | 特点 | 适用场景 |
|---|---|---|
| 动态住宅代理 | IP数量庞大,覆盖220+国家和地区,支持城市级定位 | 数据采集、价格监控、SEO监控 |
| 静态住宅代理 | IP稳定纯净,99.9%可用性,精准城市定位 | 账号管理、社交媒体运营、长期业务 |
ipipgo的代理IP都支持HTTP和SOCKS5协议,可以根据需要灵活选择。他们的IP来自真实的家庭网络,匿名性很高,不容易被识别为代理。
实际应用场景示例
下面我举个实际例子,展示如何用ipipgo的代理来采集多个电商网站的价格数据:
const axios = require('axios');
class PriceMonitor {
constructor(proxyConfig) {
this.proxyConfig = proxyConfig;
}
async checkPrice(url) {
try {
const response = await axios.get(url, {
proxy: this.proxyConfig,
timeout: 10000,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
});
// 这里解析页面获取价格信息
return this.extractPrice(response.data);
} catch (error) {
console.error(`采集失败: ${error.message}`);
return null;
}
}
extractPrice(html) {
// 实际项目中这里会有复杂的解析逻辑
return Math.random() 100; // 模拟返回价格
}
}
// 使用ipipgo代理
const monitor = new PriceMonitor({
host: 'proxy.ipipgo.com',
port: 8000,
protocol: 'http'
});
// 监控多个网站
const websites = [
'https://example-shop1.com/product/123',
'https://example-shop2.com/item/456'
];
async function monitorAll() {
for (const site of websites) {
const price = await monitor.checkPrice(site);
if (price) {
console.log(`${site} 当前价格: ${price.toFixed(2)}`);
}
// 避免请求过于频繁
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
monitorAll();
常见问题与解决方案
Q: 代理连接超时怎么办?
A: 可以增加超时时间,或者检查代理服务器地址和端口是否正确。ipipgo的代理通常很稳定,如果频繁超时可能是网络问题。
Q: 如何验证代理是否工作?
A: 可以访问httpbin.org/ip这样的服务,查看返回的IP地址是否变成了代理IP。
Q: 代理请求被目标网站拒绝怎么办?
A: 可能是代理IP被目标网站封禁了。可以尝试更换IP,或者使用ipipgo的高质量住宅代理,这类IP被封锁的概率较低。
Q: 如何管理多个代理IP?
A: 可以创建代理IP池,轮流使用不同的IP。ipipgo支持自动轮换IP,可以很方便地实现这个功能。
Q: SOCKS5代理和HTTP代理有什么区别?
A: SOCKS5代理更底层,支持更多协议,安全性更好。HTTP代理只能处理HTTP/HTTPS流量。根据具体需求选择即可,ipipgo两种都支持。

