Node.js Axios에서 HTTP 및 SOCKS 프록시 사용하기
Axios의 Node HTTP 어댑터에 HTTP 프록시를 설정하거나, 선택한 IP가 SOCKS 엔드포인트라면 SOCKS 에이전트를 사용하세요.
Axios의 Node HTTP 어댑터는 호스트와 숫자 포트를 포함한 HTTP 프록시 객체를 받습니다.
import axios from 'axios';
const response = await axios.get('https://example.com/', {
adapter: 'http',
proxy: {
protocol: 'http',
host: '203.0.113.10',
port: 8080,
},
timeout: 15000,
});
console.log(response.status);
문서용 엔드포인트를 서비스 또는 HTTP 프록시 목록의 HTTP 항목으로 바꾸세요. 이 예제는 Node를 사용합니다. 브라우저 Axios는 이 옵션으로 브라우저의 네트워크 프록시를 선택할 수 없습니다. host 필드에는 URL 스킴 없이 주소를 넣습니다.
프록시 객체의 protocol은 해당 수신 측을 설명합니다. Axios 1.21.0의 Node HTTP 어댑터는 HTTPS 대상에 CONNECT를 사용한 다음 터널을 통해 원본 서버와 TLS를 협상합니다. 이전 릴리스는 다른 프록시 경로를 사용했으므로 설치 버전이 중요합니다.
SOCKS URL에는 SOCKS 에이전트가 필요함
HTTP 프록시 객체는 SOCKS를 선택하지 않습니다. 대신 호환되는 에이전트를 사용하세요.
npm install [email protected] [email protected]
import axios from 'axios';
import { SocksProxyAgent } from 'socks-proxy-agent';
const agent = new SocksProxyAgent('socks5h://203.0.113.10:1080');
try {
const response = await axios.get('https://example.com/', {
adapter: 'http',
httpAgent: agent,
httpsAgent: agent,
proxy: false,
timeout: 15000,
});
console.log(response.status);
} finally {
agent.destroy();
}
proxy: false는 SOCKS 에이전트가 제공한 경로에 대해 Axios의 HTTP 프록시 처리를 비활성화합니다. HTTP와 HTTPS 대상 모두에 에이전트를 제공하면 두 스킴을 모두 처리합니다. 여기서 socks5h는 대상 DNS를 SOCKS 측에 맡깁니다. 선택한 서버가 해당 프로토콜을 지원해야 합니다.
오류 해석하기
웹사이트가 성공이 아닌 상태를 반환하면 Axios 오류에 응답이 포함될 수 있습니다. 응답이 없다면 오류 코드와 연결 세부 정보를 확인하세요. 모듈 누락, 지원하지 않는 프로토콜, 호환되지 않는 Node 버전 때문에 요청이 엔드포인트에 도달하기 전에 실패할 수 있습니다.
인증이 필요한 HTTP 프록시는 프록시 객체의 auth 필드에 운영자가 제공한 자격 증명을 사용하세요. 대상의 인증 설정은 다른 상대를 위한 것입니다.