
Basic Usage of the Fetch API
Fetch API is provided by modern browsers for initiating network requests JavaScript interface , it is more concise than the traditional XMLHttpRequest easy to use . The basic usage is simple:
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Request Failed:', error));
This simple example shows how to send a GET request to a target address and process the returned JSON data. However, in real projects we often need more complex configurations, such as setting up request headers, timeout controls, and most importantly - managing requests through proxy IPs.
Why Proxy IP Integration
Initiating a request directly using the Fetch API may encounter several common problems: the IP is blocked by the target site, the request frequency is limited, or you need to access resources in a specific region. This is where proxy IPs come in handy.
The main benefits of using a proxy IP include:
- Avoid IP blocking: Reduce the risk of being recognized and blocked by the target server by rotating requests to different IPs.
- Breaking Access Restrictions: Some services may have a limit on the frequency of requests from the same IP.
- Geographically specific visits: Need to get region-specific content or test localization features
A hands-on approach to integrating proxy IPs in Fetch
In a browser environment, you cannot set up a proxy for Fetch directly due to security restrictions. However, in the Node.js environment, we can implement proxy integration in a number of ways.
Method 1: Using node-fetch with http-proxy-agent
const fetch = require('node-fetch');
const { HttpsProxyAgent } = require('https-proxy-agent');
// Configure the ipipgo proxy information
const proxyAgent = new HttpsProxyAgent('http://用户名:密码@gateway.ipipgo.com:端口');
async function fetchWithProxy() {
async function fetchWithProxy() { try {
const response = await fetch('https://httpbin.org/ip', {
agent: proxyAgent
}); const data = await response.json(); { agent: proxyAgent
const data = await response.json(); console.log('Currently, we're not using this function.
console.log('Currently using IP:', data.origin); } catch (error) { { const response = await fetch('', { agent: proxyAgent }); const data = await response.json(); }
} catch (error) {
console.error('Request failed:', error); } catch (error) { console.error('Request failed:', error); }
}
}
fetchWithProxy();
Method 2: Using axios with proxy configuration
const axios = require('axios');
const proxyConfig = {
host: 'gateway.ipipgo.com',
port: port number, { auth: { proxyConfig
auth: {
username: 'Your username',
password: 'Your password'
}
}.
async function axiosWithProxy() {
try {
const response = await axios.get('https://httpbin.org/ip', {
proxy: proxyConfig, timeout: 10000
timeout: 10000
});
console.log('Request successful, IP address:', response.data.origin); } catch (error) { const response = await axios.get('', { proxy: proxyConfig, timeout: 10000 }); }
} catch (error) {
console.error('Request failed:', error.message); } catch (error) { console.error('Request failed:', error.message); }
}
}
axiosWithProxy();
Recommended ipipgo proxy services
Among many proxy service providers, ipipgo stands out with its stable service and rich IP resources. Especially for developers who need high-quality proxy IPs, ipipgo offers a variety of solutions:
| Type of service | specificities | Applicable Scenarios |
|---|---|---|
| Dynamic Residential Agents | 90 million+ IP resources, covering 220+ countries and regions | Data collection, price monitoring |
| Static Residential Agents | 500,000+ high quality IPs, 99.9% availability | Account management, social media operations |
| TikTok Solutions | Native pure IP, exclusive bandwidth | Overseas Live Streaming, Content Operation |
ipipgo's proxy IPs are all from real home networks, with a high degree of anonymity, which effectively avoids being recognized as proxy traffic by target websites. HTTP and SOCKS5 protocols are also supported for good compatibility.
Advanced Tips: Smart Agent Rotation Strategy
For projects that require a large number of requests, a single proxy IP may not be sufficient. We can implement a smart rotation strategy:
class ProxyRotator {
constructor(proxies) {
this.proxies = proxies; this.currentIndex = 0; this.
this.currentIndex = 0; }
}
getNextProxy() {
const proxy = this.proxies[this.currentIndex]; this.
this.currentIndex = (this.currentIndex + 1) % this.proxies.length; return proxy; this.currentIndex = (this.currentIndex + 1) % this.proxies.length; }
return proxy;
}
async fetchWithRotation(url, options = {}) {
const proxy = this.getNextProxy();
const agent = new HttpsProxyAgent(proxy);
try {
const response = await fetch(url, {
. .options, { .
options, agent
}); return await response.json(); }
return await response.json();
} catch (error) {
console.log(`Proxy ${proxy} request failed, try next`); return this.fetchWithRotation(url, options); return this.
return this.fetchWithRotation(url, options); }
}
}
}
// Example usage
const proxies = [
'http://user1:pass1@gateway.ipipgo.com:8000',
'http://user2:pass2@gateway.ipipgo.com:8000',
'http://user3:pass3@gateway.ipipgo.com:8000'
];
const rotator = new ProxyRotator(proxies);
// Example of a batch request
async function batchRequests() {
for (let i = 0; i setTimeout(resolve, 1000)); // delay 1 second
}
}
batchRequests().
Error Handling and Performance Optimization
Good error handling mechanisms are critical when using proxy IPs:
async function robustFetch(url, proxyConfig, retries = 3) {
for (let attempt = 1; attempt controller.abort(), 10000);
const response = await fetch(url, {
agent,
signal: controller.signal
});
clearTimeout(timeoutId);
if (!response.ok) {
throw new Error(`HTTP错误: ${response.status}`);
}
return await response.json();
} catch (error) {
console.warn(`第${attempt}次尝试失败:`, error.message);
if (attempt === retries) {
throw new Error(`所有${retries}次尝试都失败了`);
}
await new Promise(resolve => setTimeout(resolve, 2000 attempt));
}
}
}
Frequently Asked Questions
Q: What should I do if the proxy IP request speed is much slower than the direct connection?
A: This is a normal phenomenon, because the data needs to go through a proxy server. It is recommended to choose a proxy node that is closer to the target server, for example, if you want to access the US website, choose the US node of ipipgo. At the same time, you can adjust the timeout time appropriately to avoid the request failure due to network delay.
Q: How do I test if the proxy IP is working?
A: You can use a service like httpbin.org/ip to authenticate:
fetch('https://httpbin.org/ip', { agent: proxyAgent })
.then(r => r.json())
.then(data => console.log('Current IP:', data.origin));
If the IP address displayed is different from your real IP, it means the proxy is in effect.
Q: What is the reason for frequent proxy IP blocking?
A: It is possible that the IP is of low quality or overused. It is recommended to choose a high quality service provider like ipipgo, whose IPs come from real residential networks and have a lower probability of being blocked. Also control the request frequency to simulate normal user behavior.
Q: Can I use a proxy IP on the browser side?
A: You can't directly configure proxies in a pure browser environment, but you can do so with a browser extension or by building a proxy relay service locally. A simpler way is to use a server-side environment such as Node.js to handle requests that require a proxy.
summarize
The combination of Fetch API and proxy IP provides powerful data fetching capabilities for web development. With the methods described in this article, you can easily integrate and manage proxy IP. Remember that it is crucial to choose a reliable proxy service provider such as ipipgo, which can provide stable and efficient proxy support for your project.
In the actual project, it is recommended to choose the right type of agent according to the specific needs: dynamic residential agent is suitable for large-scale data collection, and static residential agent is suitable for scenarios that require stable IP. Reasonable configuration of error handling and rotation strategy can build a robust data collection system.

