Gdzieś na Stack Overflow akurat ktoś jest przekonany, że Axios „po cichu psuje się” przy proxy HTTPS. To jedno z najczęściej powtarzanych twierdzeń w poradnikach o proxy w Node.js i nie opisuje ono aktualnej wersji testowanej w tym przewodniku. Uruchomiłem lokalne środowisko testowe z prawdziwymi źródłami HTTP i HTTPS za dwoma proxy i Axios 1.19.0 poprowadził żądanie HTTPS przez poprawne zapytanie CONNECT, zamiast omijać proxy.
To nie znaczy, że opisywane problemy są wymyślone. Starsze wersje Axios miały realne błędy (zobacz issue #3384 i issue #4531), a nowsze wydania Node dodają drugi tor obsługi proxy z poziomu środowiska, który wymaga ostrożnej konfiguracji. Ten poradnik pokazuje, co naprawdę działa w Axios 1.19.0 dziś, wszystkie sposoby podpięcia proxy do żądań, wzorzec rotacji z interceptorami, którego prawie nikt nie pokazuje, oraz pełną tabelę błędów i poprawek na wypadek, gdyby coś jednak poszło nie tak.
Czym jest proxy w Axios i dlaczego ma znaczenie w Node.js?
Proxy w kontekście Axios to po prostu serwer pośredniczący stojący między Twoim procesem Node a docelową stroną. Żądanie trafia najpierw do proxy, proxy przekazuje je dalej, a strona docelowa widzi adres IP proxy zamiast Twojego. I to cała sztuka.
Programiści sięgają po to z kilku powodów: scrapowanie stron, które ograniczają liczbę żądań lub blokują po IP, testowanie działania aplikacji z innej lokalizacji geograficznej, kierowanie ruchu przez firmowy punkt wyjścia albo po prostu ukrycie własnego adresu IP przed logami dostępu po drugiej stronie. Oficjalna konfiguracja żądań Axios udostępnia wbudowaną opcję proxy z polami host, port, protocol i auth — jest tam od lat i to właśnie ona jako pierwsza pojawia się w każdym poradniku, w tym w tym.
Jest jednak istotny szczegół, który często się pomija: opcja proxy zachowuje się inaczej w zależności od tego, czy łączysz się z celem HTTP czy HTTPS, a także od wersji Axios, z której korzystasz. I właśnie dlatego powstał ten przewodnik.
Konfiguracja Node.js i Axios (szybka baza)
Pomiń ten krok, jeśli projekt już istnieje. Jeśli nie, zajmie to około dwóch minut.
mkdir axios-proxy-demo && cd axios-proxy-demo
npm init -y
npm install axios
Dodaj "type": "module" do package.json, jeśli chcesz używać importów ESM (ja wolę to rozwiązanie — CommonJS require() w demo proxy wygląda już trochę staro). Aktualna wersja Node LTS to v24.18.0, choć testy uruchomiłem konkretnie na v22.22.3, żeby wyniki nie zależały od najnowszych niuansów runtime.
Wklej to do app.js i uruchom node app.js:
import axios from 'axios';
const res = await axios.get('https://httpbin.org/ip');
console.log(res.data);
W odpowiedzi powinien pojawić się Twój prawdziwy adres IP. To punkt odniesienia — gdy proxy zacznie działać, to samo żądanie powinno zwrócić adres IP proxy.
Zapisz tę odpowiedź przed włączeniem proxy; dzięki temu będziesz mieć konkretny punkt porównania dla żądania przez proxy w następnym kroku.
Czy Axios naprawdę obsługuje proxy HTTPS? Ustalmy fakty
Krótka odpowiedź: tak, w aktualnym stabilnym wydaniu. Axios 1.19.0 opisuje tunelowanie CONNECT dla celów HTTPS za proxy HTTP. API pobrań npm odnotowało 117 890 039 pobrań Axios w okresie od 31 lipca do 6 sierpnia 2026, co pokazuje skalę użycia tej biblioteki. Gdy łączysz się z adresem HTTPS przez proxy, aktualny Axios wysyła żądanie CONNECT, aby utworzyć tunel, a uścisk TLS odbywa się bezpośrednio z rzeczywistym serwerem źródłowym. Sprawdziłem to sam: lokalny proxy HTTP, lokalne źródło HTTPS z certyfikatem self-signed i licznik CONNECT na proxy zwiększał się dokładnie tak, jak powinien.
Skąd więc niemal w każdym wątku na forum bierze się hasło „Axios HTTPS proxy broken”? Kilka powodów — i wszystkie są realne:
- Stare wersje Axios. Linkowane przez ludzi zgłoszenia na GitHubie często mają kilka lat i opisują zachowanie zależne od wersji oraz konfiguracji, którego nie należy uogólniać na aktualny Axios.
- Serwery proxy bez obsługi CONNECT. W takiej konfiguracji tunel się nie zestawi, a Axios powinien pokazać błąd; zanim uznasz, że proxy jest omijane, sprawdź faktyczną ścieżkę i błąd.
- Mylenie opcji
proxyz czymś, czym nie jest. Opcjaproxyto instrukcja dla forward proxy, a nie uniwersalny przełącznik „przepuść cały ruch przez ten agent bez względu na wszystko”.
Chromium podał w 2023 roku, że ponad 90% nawigacji Chrome na głównych platformach korzystało z HTTPS. To dane historyczne z Chrome, a nie pełny spis całej sieci, ale dobrze pokazują, dlaczego zachowanie dla celów HTTPS jest centralnym punktem tego poradnika. Jeśli używasz starego wydania Axios, odtwórz problem na aktualnej linii, zanim założysz, że historyczny błąd nadal opisuje obecne zachowanie; przetestuj aktualizację we własnej aplikacji przed wdrożeniem.
Kiedy nadal warto użyć jawnego agenta
Wbudowana konfiguracja proxy jest w porządku przy jednym statycznym, klasycznym proxy. Ale przestaje wystarczać, gdy potrzebujesz kontroli per żądanie, rotacji proxy albo wsparcia dla SOCKS — wbudowana opcja Axios po prostu nie została do tego zaprojektowana. I tu przydaje się HttpsProxyAgent, który opisuję niżej. Traktuj natywną opcję jako „wystarczająco dobre dla jednego proxy i jednego zastosowania”, a podejście oparte na agencie jako „to, czego naprawdę chcesz w produkcji”.
Tor proxy środowiskowego w Node v24 i v22.21+
Nowsze wydania Node mają wbudowany tryb proxy z poziomu środowiska, aktywowany przez NODE_USE_ENV_PROXY=1 albo flagę --use-env-proxy. Zgodnie z dokumentacją CLI Node funkcja ta pojawiła się w v24.0.0 i została przeniesiona do v22.21.0 — więc powiedzenie „Node 22+” jest technicznie nieprecyzyjne; chodzi konkretnie o v22.21.0 i nowsze w tej gałęzi. Jeśli masz wcześniejszy patch Node 22, ta flaga po prostu nie istnieje.
Aktualny Axios i tak odczytuje HTTP_PROXY, HTTPS_PROXY oraz NO_PROXY przez zależność proxy-from-env, więc global-agent nie jest potrzebny na tym aktualnym torze Axios. Jeśli jednocześnie działa natywny tryb proxy środowiskowego w Node, w decyzji o routingu mogą brać udział dwie warstwy.
Dokumentacja Axios zauważa, że w wersjach Node, w których agent ma właściwość proxyEnv, Axios oddaje rozwiązywanie proxy Node zamiast robić to samemu. W praktyce oznacza to, że powinieneś wybrać jeden system i się go trzymać:
- Niech zarządza tym Node: ustaw flagę, nie ustawiaj
proxyw Axios i pozwól, by robotę wykonały zmienne środowiskowe. - Niech zarządza tym Axios: nie ustawiaj flagi Node i pozwól, by zadziałało wbudowane rozwiązywanie proxy z env.
- Pełna kontrola ręczna: ustaw jawnie
proxy: falsei przekaż własnyhttpsAgent— to omija oba systemy automatyczne, co polecam, gdy potrzebujesz rotacji albo logiki per żądanie.
Sprawdziłem to po stronie Axios: ustawienie HTTP_PROXY w środowisku procesu potomnego skierowało żądanie przez mój lokalny proxy, a dopisanie odpowiedniego NO_PROXY sprawiło, że kolejne żądanie go ominęło. Czyli ścieżka przez zmienne środowiskowe naprawdę działa od ręki — uważać trzeba dopiero na scenariusz z dwoma trybami naraz.
5 sposobów podpięcia proxy do Axios (porównanie)
Zanim przejdziemy do kodu, warto zobaczyć cały obraz. Zbudowałem i przetestowałem każdą z tych metod na prawdziwym lokalnym środowisku proxy, a nie tylko na podstawie dokumentacji.
| Metoda | Obsługa HTTPS | Obsługa autoryzacji | Kontrola per żądanie | Przyjazna rotacji | Złożoność |
|---|---|---|---|---|---|
Wbudowana opcja proxy | ✅ (aktualny Axios) | ✅ | ✅ | ❌ | Niska |
Domyślne ustawienia axios.create() | ✅ (aktualny Axios) | ✅ | ❌ (na cały egzemplarz) | ❌ | Niska |
Zmienne środowiskowe (HTTP_PROXY/HTTPS_PROXY) | ✅ | ✅ | ❌ | ❌ | Niska |
httpsAgent + HttpsProxyAgent | ✅ | ✅ | ✅ | ⚠️ (ręcznie) | Średnia |
| Interceptor żądań + pula agentów | ✅ | ✅ | ✅ | ✅ | Średnio-wysoka |
Użyj wbudowanej opcji, jeśli piszesz szybki skrypt i korzystasz z jednego proxy. Sięgnij po axios.create(), gdy wszystkie żądania w danym module mają iść przez to samo proxy bez powtarzania konfiguracji. Korzystaj ze zmiennych środowiskowych, gdy infrastruktura już centralnie zarządza routingiem proxy i chcesz po prostu to odziedziczyć. Wybierz jawnego agenta, gdy potrzebujesz możliwości, których natywna konfiguracja nie daje — a po interceptor sięgnij w momencie, gdy „kontrola” zaczyna oznaczać „rotację”.

Krok po kroku: podstawowa konfiguracja proxy w Axios
Najprostsze ustawienie używa wbudowanego obiektu proxy bezpośrednio przy żądaniu:
import axios from 'axios';
const res = await axios.get('https://httpbin.org/ip', {
proxy: {
host: '203.0.113.10',
port: 8080,
protocol: 'http',
},
});
console.log(res.data);
Uruchom to, a w odpowiedzi powinien pojawić się adres IP proxy zamiast Twojego. Jeśli testujesz lokalnie z prawdziwym proxy, zwykle zajmuje to znacznie mniej niż sekundę — zwłaszcza w porównaniu z ręcznym ustawianiem systemowego proxy tylko po to, by sprawdzić jedno żądanie, co potrafi zjadać kwadrans, którego nie masz.
Porównaj tę odpowiedź z bazową. Udany test powinien pokazać publiczny adres IP proxy, a nie adres źródłowy zapisany wcześniej.
Korzystanie z axios.create() dla domyślnych ustawień na poziomie instancji
Jeśli każde żądanie w danym module ma iść przez to samo proxy, osadź konfigurację w instancji zamiast powtarzać ją za każdym razem:
const client = axios.create({
proxy: {
host: '203.0.113.10',
port: 8080,
},
timeout: 15_000,
});
const res = await client.get('https://httpbin.org/ip');
Sprawdziłem, że ustawienie proxy: false na pojedynczym żądaniu poprawnie omija domyślną konfigurację instancji — przydatne, jeśli 95% wywołań ma iść przez proxy, ale kilka, na przykład ping kontrolny, nie powinno.
Ustawianie proxy przez zmienne środowiskowe
Przy centralnie zarządzanym routingu — pomyśl o kontenerach Docker albo środowiskach CI, gdzie zespół ops już ustawia zmienne proxy — nie musisz w ogóle dotykać konfiguracji Axios:
export HTTP_PROXY=http://203.0.113.10:8080
export HTTPS_PROXY=http://203.0.113.10:8080
export NO_PROXY=localhost,127.0.0.1
Aktualny Axios odczytuje te zmienne bez global-agent. Pamiętaj tylko o granicy wersji Node wspomnianej wyżej: jeśli działa też NODE_USE_ENV_PROXY, jasno określ właściciela routingu i przetestuj zachowanie NO_PROXY w docelowym runtime.
Krok po kroku: konfiguracja proxy HTTPS z httpsAgent (dla pełnej kontroli)
To jest konfiguracja, którą faktycznie polecam, gdy potrzebujesz czegoś więcej niż „jedno proxy na zawsze”. Zainstaluj aktualny pakiet agenta:
npm install https-proxy-agent
https-proxy-agent 9.1.0 wymaga Node 20 lub nowszego i wysyła do proxy poprawne żądanie CONNECT, zanim przetuneluje przez nie połączenie do celu.
import axios from 'axios';
import { HttpsProxyAgent } from 'https-proxy-agent';
const agent = new HttpsProxyAgent('http://203.0.113.10:8080');
const client = axios.create({
proxy: false, // zatrzymaj natywne rozwiązywanie Axios, żeby nie wtrącało się dodatkowo
httpsAgent: agent,
timeout: 15_000,
});
const res = await client.get('https://httpbin.org/ip');
console.log(res.data);
Ustaw proxy: false, gdy routingiem zarządza jawny agent. Dzięki temu konfiguracja jest jednoznaczna i Axios ani jego logika środowiskowa nie będą konkurować z przekazanym agentem.
Dodawanie uwierzytelniania do proxy
Wstaw dane logowania bezpośrednio w URL proxy:
const agent = new HttpsProxyAgent('http://myuser:mypassword@203.0.113.10:8080');
Jeśli hasło zawiera znaki specjalne — @, : i # to najczęstsze kłopotliwe przypadki — zakoduj je procentowo przed zbudowaniem URL albo sklejaj ciąg z encodeURIComponent() dla każdej składowej. Surowe @ w haśle zostanie odczytane jako początek części hosta i dostaniesz błąd połączenia, który na pierwszy rzut oka w ogóle nie wygląda na problem z kodowaniem.
Korzystanie z proxy SOCKS5 w Axios
Proxy SOCKS nie są zgodne z HttpsProxyAgent — do tego protokołu potrzebny jest inny agent:
npm install socks-proxy-agent
import { SocksProxyAgent } from 'socks-proxy-agent';
const agent = new SocksProxyAgent('socks5://myuser:mypass@203.0.113.10:1080');
const client = axios.create({
proxy: false,
httpsAgent: agent,
});
socks-proxy-agent 10.1.0 również wymaga Node 20+. SOCKS5 warto wybrać wtedy, gdy pracujesz w sieciach firmowych, które udostępniają tylko bramę SOCKS, albo gdy dostawca proxy oferuje większą elastyczność protokołów niż zwykły HTTP proxy.
Rotacja proxy w Axios z użyciem interceptorów żądań
Losowy wybór proxy w kodzie wywołującym działa przy jednorazowym skrypcie. Rozsypuje się, gdy wysyłasz setki żądań, bo nie ma centralnego miejsca śledzącego martwe proxy, nie ma logiki ponawiania, a kod wyboru proxy kończy się skopiowany w wielu miejscach. System interceptorów Axios daje takiej logice jedno, testowalne miejsce; żaden z pięciu konkurencyjnych poradników, które sprawdzałem w SERP, nie używał tego wzorca.

Budowa puli proxy
import axios, { AxiosError, InternalAxiosRequestConfig } from 'axios';
import { HttpsProxyAgent } from 'https-proxy-agent';
class ProxyPool {
private agents: HttpsProxyAgent<string>[];
private index = 0;
constructor(proxyUrls: string[]) {
this.agents = proxyUrls.map((url) => new HttpsProxyAgent(url));
}
next(): HttpsProxyAgent<string> {
const agent = this.agents[this.index];
this.index = (this.index + 1) % this.agents.length;
return agent;
}
}
const pool = new ProxyPool([
'http://user:pass@proxy1.example.com:8080',
'http://user:pass@proxy2.example.com:8080',
]);
const client = axios.create({ timeout: 15_000 });
client.interceptors.request.use((config: InternalAxiosRequestConfig) => {
config.proxy = false;
config.httpsAgent = pool.next();
return config;
});
Przetestowałem to na dwóch lokalnych proxy i potwierdziłem, że żądania przełączały się naprzemiennie — proxy A, potem proxy B, potem z powrotem A. Pamiętaj, że Axios wykonuje interceptory żądań w kolejności LIFO, więc jeśli masz inne interceptory (nagłówki autoryzacji, logowanie), kolejność ma większe znaczenie, niż się wydaje.
Dodanie interceptora odpowiedzi z zabezpieczeniem retry
To właśnie tutaj większość domowych skryptów rotujących robi się niestaranna. Ślepe ponawianie każdego błędu na nieograniczonej puli może zamienić jedno wadliwe żądanie w kaskadowy bałagan — szczególnie w przypadku metod nieidempotentnych, takich jak POST, gdzie ponowienie może duplikować efekt uboczny, którego naprawdę nie chcesz powielać.
type RetryableConfig = InternalAxiosRequestConfig & {
__proxyRetryCount?: number;
};
client.interceptors.response.use(
undefined,
async (error: AxiosError) => {
const config = error.config as RetryableConfig | undefined;
if (!config) throw error;
const method = String(config.method ?? 'get').toUpperCase();
config.__proxyRetryCount ??= 0;
if (method !== 'GET' || config.__proxyRetryCount >= 1) throw error;
config.__proxyRetryCount += 1;
config.proxy = false;
config.httpsAgent = pool.next();
return client.request(config);
}
);
Przetestowałem to na celowo uszkodzonym proxy i potwierdziłem, że uruchamia się dokładnie jedno ponowienie na alternatywnym agencie — bez nieskończonej pętli, bez retry dla POST. To właśnie taki limit jest potrzebny: polityka retry, która jasno mówi, które żądania można bezpiecznie odtworzyć, a nie sztuczka „po prostu spróbuj jeszcze raz, aż zadziała”.

Tabela diagnostyczna błędów: mapowanie problemu na poprawkę
Dodaj tę sekcję do zakładek. To są błędy, które naprawdę pojawiają się w issue na GitHubie Axios i na Stack Overflow, a nie hipotetyczne przypadki.
| Błąd / objaw | Prawdopodobna przyczyna | Naprawa |
|---|---|---|
ECONNREFUSED | Zły host/port albo serwer proxy nie działa | Zweryfikuj połączenie przez curl -x http://host:port target-url zanim ruszysz kod Axios |
407 Proxy Authentication Required | Brak lub zły login/hasło | Dodaj auth: { username, password } do konfiguracji proxy albo wstaw dane do URL HttpsProxyAgent |
403 Forbidden | Serwer docelowy albo WAF odrzucił żądanie lub IP proxy | Sprawdź politykę dostępu strony, uwierzytelnienie i tempo żądań; nie traktuj innego nagłówka ani innego IP jako prawa do obejścia ograniczeń |
| Odpowiedź pokazuje Twój prawdziwy IP | NO_PROXY, proxy:false, jawny bezpośredni agent albo konfiguracja historyczna/specyficzna dla wersji może omijać proxy | Sprawdź, która warstwa odpowiada za routing; zweryfikuj ścieżkę na kontrolowanym endpointcie IP i w razie potrzeby użyj jawnego agenta |
ETIMEDOUT | Czas połączenia lub odpowiedzi przekroczył ustawiony timeout | Sprawdź, gdzie znika czas; zwiększ timeout tylko jeśli uzasadnia to charakter zadania, w przeciwnym razie wymień lub schłodź wadliwą trasę |
ECONNRESET w trakcie odpowiedzi | Proxy, sieć lub serwer docelowy zamknął połączenie | Zapisz, na którym hopie wystąpił błąd; ponawiaj tylko żądania bezpieczne do powtórzenia i z ograniczonym budżetem retry |
502 Bad Gateway za Nginx | Źle skonfigurowany proxy_pass w Nginx albo timeout Axios nie pasuje do Nginx | Sprawdź proxy_connect_timeout i proxy_read_timeout (oba domyślnie 60 s) i dopasuj je do timeoutu w Axios |
ERR_TLS_CERT_ALTNAME_INVALID | Zły typ agenta dla danego celu albo certyfikat self-signed | Upewnij się, że używasz właściwego agenta dla protokołu; ustaw rejectUnauthorized: false tylko do testów lokalnych — nigdy w produkcji |
Szybka lista kontrolna debugowania
Gdy coś przestaje działać i nie wiesz dlaczego, przejdź przez to po kolei:
- Przetestuj proxy bezpośrednio przez
curl -x http://host:port https://your-target.com. Jeśli nie działa, sprawdź łączność z proxy, uwierzytelnienie i sam cel, zanim zmienisz cokolwiek w Axios. Jeśli działa, ścieżka Axios nadal wymaga osobnej weryfikacji. - Potwierdź, jakich wersji Axios i Node faktycznie używasz, i porównuj historyczne zgłoszenia z tą samą wersją oraz konfiguracją, zanim zastosujesz ich poprawki.
- Ustal, który system rozwiązuje proxy — natywna konfiguracja Axios, rozwiązywanie proxy z env w Axios, wbudowany tryb Node dla env proxy czy jawny agent. Nigdy nie pozwól, żeby więcej niż jeden system zarządzał tym samym żądaniem.
- Sprawdź
NO_PROXY, czy przypadkiem nie dopasowuje hosta, którego nie chciałeś wykluczyć. - Jeśli używasz jawnego agenta, upewnij się, że ustawiono
proxy: false, żeby Axios nie próbował obsługiwać tego podwójnie.
Kiedy całkiem odpuścić własną infrastrukturę proxy
Wszystko powyższe jest naprawdę przydatne, jeśli Twoim celem jest routowanie dowolnego ruchu — testy sieci firmowej, testy geograficzne aplikacji albo kontrolowany wychodzący ruch sieciowy. Ale wielu programistów trafia do tematu „jak ustawić proxy w Axios”, bo tak naprawdę chcą danych ze strony internetowej, a proxy jest tylko środkiem do celu.
Jeśli to Twój przypadek, warto zadać sobie pytanie, czy naprawdę potrzebujesz proxy, czy raczej API do scrapowania, które przejmie infrastrukturę za Ciebie. Open API Thunderbit przyjmuje URL i schemat, a zwraca ustrukturyzowany JSON — bez parsowania surowego HTML, bez bibliotek agentów i bez pilnowania puli proxy. Endpoint /extract obsługuje strony renderowane przez JS, zabezpieczenia anty-bot i CAPTCHA po stronie serwera, a lżejszy endpoint /distill po prostu zamienia stronę na czysty Markdown, jeśli tylko tego potrzebujesz. Jest też serwer MCP udostępniający narzędzia takie jak thunderbit_extract i thunderbit_suggest_fields, dzięki czemu asystenci kodowania, tacy jak Claude czy Cursor, mogą pobierać dane strukturalne w trakcie pracy bez dotykania konfiguracji proxy, a także CLI do terminala i workflow CI.
| Obszar | Własne Axios + proxy | Thunderbit API/MCP/CLI |
|---|---|---|
| Pozyskiwanie i rotacja proxy | Zarządzasz sam | Obsługiwane po stronie serwera |
| Trudności związane z przeglądarką i dostępem | Obsługujesz warstwę przeglądarki/sieci | Zarządzane przez usługę w granicach opisanych możliwości |
| Strony renderowane przez JS | Potrzebna przeglądarka headless | renderMode: full |
| Format wyjściowy | Surowy HTML → sam parsujesz | Ustrukturyzowany JSON na podstawie schematu |
| Utrzymanie, gdy strony się zmieniają | Utrzymujesz parsowanie/selektory | Zarządzana warstwa ekstrakcji ogranicza część utrzymania po stronie aplikacji |
Uczciwe ujęcie sprawy: jeśli potrzebujesz routingu ruchu do testów albo w środowisku firmowym, nic z tego nie zastępuje Axios i konfiguracji proxy. Jeśli Twoim rezultatem mają być ustrukturyzowane dane z sieci, podejście API-first może zmniejszyć ilość kodu dotyczącego proxy, przeglądarki i parsowania, który utrzymuje Twoja aplikacja. Przy pobraniu z 7 sierpnia 2026 dokumentacja limitów API Thunderbit podawała, że plan Free ma limit 10 żądań na minutę i 2 równoczesne żądania. Traktuj to jako limit czasowy i sprawdź stronę ponownie, zanim oprzesz na tym produkcję.
Podsumowanie
Główna lekcja jest trochę sprzeczna z tym, co mówią starsze poradniki: aktualny Axios dokumentuje i w lokalnym teście poprawnie użył tunelowania CONNECT dla celu HTTPS. Historyczne błędy nadal mają znaczenie, ale wymagają kontekstu wersji i konfiguracji. Natywna konfiguracja to dobry, prosty punkt startowy; gdy potrzebujesz kontroli per żądanie, wsparcia SOCKS albo rotacji, jawny HttpsProxyAgent (lub SocksProxyAgent) połączony z proxy: false daje jaśniejszy podział odpowiedzialności. A jeśli rotujesz przez pulę w produkcji, interceptory żądań i odpowiedzi zapewniają centralne, testowalne miejsce do realizacji tego zadania — tylko pamiętaj, by logika retry miała zabezpieczenie przed pętlą i odtwarzała wyłącznie żądania, które naprawdę są bezpieczne do powtórzenia.
Zapisz sobie tabelę diagnostyczną na kolejną noc, gdy konfiguracja proxy rzuci w Ciebie enigmatycznym błędem o 2:00 w nocy. A jeśli zauważysz, że więcej czasu spędzasz na debugowaniu samego proxy niż na korzystaniu z danych, które próbujesz pobrać, warto sprawdzić, czy narzędzie do ekstrakcji oparte na API nie rozwiąże rzeczywistego problemu szybciej niż cała infrastruktura.
FAQ
Czy Axios natywnie obsługuje proxy HTTPS?
Tak, w aktualnym Axios dla klasycznego proxy HTTP: bieżąca dokumentacja opisuje tunelowanie CONNECT dla celów HTTPS, a Axios 1.19.0 przeszedł tę trasę w lokalnym teście. Historyczne wydania i konkretne konfiguracje proxy powodowały realne błędy, więc sprawdzaj dokładną wersję i typ proxy, zamiast zakładać powszechny sukces albo powszechną awarię.
Jak rotować proxy w Axios?
Użyj interceptora żądań, aby przed każdym wysłaniem przypisywać inne httpsAgent z puli proxy, a do tego dodaj interceptor odpowiedzi, który ponawia nieudane żądanie przez inne proxy. Ogranicz retry do jednego i tylko dla metod idempotentnych, takich jak GET, żeby przypadkiem nie odtworzyć żądania, którego nie powinno się powtarzać.
Dlaczego Axios pokazuje mój prawdziwy IP, mimo że używam proxy?
Sprawdź, czy NO_PROXY, proxy:false, jawny bezpośredni agent albo routowanie specyficzne dla środowiska wdrożeniowego nie omija proxy. Zapisz wersje Axios i Node oraz przetestuj proxy niezależnie przez cURL. Jeśli potrzebujesz jednoznacznego routingu per żądanie, użyj HttpsProxyAgent z proxy:false i zweryfikuj obserwowany IP na kontrolowanym endpointcie.
Czy mogę używać proxy SOCKS5 z Axios?
Tak, przez pakiet socks-proxy-agent. Utwórz instancję SocksProxyAgent z adresem SOCKS i przekaż ją jako httpsAgent w konfiguracji Axios — tylko upewnij się, że nie podajesz też HttpsProxyAgent, bo oba protokoły wymagają różnych typów agentów.
Jaka jest różnica między opcją proxy a httpsAgent w Axios?
Opcja proxy to wbudowana konfiguracja Axios dla pojedynczego, statycznego proxy i dobrze działa w prostych przypadkach w aktualnych wersjach. httpsAgent przyjmuje własny agent Node.js — taki jak HttpsProxyAgent albo SocksProxyAgent — dając Ci bezpośrednią kontrolę per żądanie nad routingiem, uwierzytelnianiem i rotacją, do czego natywna opcja nigdy nie była projektowana.


