curl-impersonate
특정 브라우저를 모방할 수 있는 curl의 특별한 빌드로, Chrome, Edge, Safari, Firefox를 모방할 수 있음. curl-impersonate는 실제 브라우저와 동일한 TLS 및 HTTP 핸드셰이크를 수행할 수 있음. 명령줄 도구로 사용하거나 라이브러리로 통합 가능함.
왜 필요한가?
- HTTP 클라이언트가 TLS 웹사이트와 통신할 때, 첫 번째로 TLS 핸드셰이크를 수행함. 이때의 첫 메시지를 Client Hello라고 부름.
- 대부분의 HTTP 클라이언트와 라이브러리가 생성하는 Client Hello 메시지는 실제 브라우저와 크게 다름.
- 서버가 HTTP/2를 사용할 경우, TLS 핸드셰이크 외에도 HTTP/2 핸드셰이크가 필요하며, 이때 교환되는 설정도 실제 브라우저와 다름.
- 이러한 이유로, 일부 웹 서비스는 TLS 및 HTTP 핸드셰이크를 통해 클라이언트를 식별하고, 다른 클라이언트에 대해 다른 콘텐츠를 제공함.
- 이러한 방법은 TLS 핑거프린팅 및 HTTP/2 핑거프린팅으로 알려져 있으며, 웹을 덜 개방적이고 덜 개인적이며 특정 웹 클라이언트에 대해 더 제한적으로 만듦.
- 이 저장소의 수정된 curl은 TLS 및 HTTP 핸드셰이크가 실제 브라우저와 정확히 동일하게 보이게 함.
어떻게 작동하는가?
-
curl을 브라우저처럼 보이도록 상당히 수정함.
- Firefox가 사용하는 TLS 라이브러리인 nss로 curl을 컴파일하고, Chrome 버전은 Google's TLS 라이브러리인 BoringSSL로 컴파일함.
- 다양한 TLS 확장 및 SSL 옵션을 구성하는 방법을 수정함.
- 새로운 TLS 확장 지원 추가.
- HTTP/2 연결에 대한 curl의 설정 변경.
-
--ciphers, --curves 및 일부 -H 헤더와 같은 비기본 플래그로 curl 실행.
지원되는 브라우저
- 다양한 버전의 Chrome, Edge, Firefox, Safari를 모방할 수 있음.
- 각 브라우저에 대한 래퍼 스크립트가 제공되어 curl-impersonate를 실행함.
기본 사용법
문서
설치
-
curl-impersonate는 기술적 이유로 두 가지 버전이 있음. Chrome, Edge, Safari를 모방하는 chrome 버전과 Firefox를 모방하는 firefox 버전이 있음.
- Linux 및 macOS용 사전 컴파일된 바이너리는 GitHub 릴리스 페이지에서 제공됨.
고급 사용법
libcurl-impersonate
-
libcurl-impersonate.so는 명령줄 curl-impersonate와 동일한 변경 사항으로 컴파일된 libcurl임.
- 추가 API 함수 curl_easy_impersonate를 제공함.
CURL_IMPERSONATE 환경 변수 사용
- 이미 libcurl을 사용하는 애플리케이션에서 LD_PRELOAD를 사용하여 기존 라이브러리를 런타임에 대체 가능함.
-
CURL_IMPERSONATE 환경 변수를 설정하여 모든 옵션을 자동으로 설정 가능함.
기여
- 오픈 이슈를 확인하고, 변경 사항을 포함한 풀 리퀘스트를 열어 기여 가능함.
스폰서
- 프로젝트를 오픈하고 유지하는 데 도움을 주는 스폰서가 있음. 스폰서가 되고 싶다면 직접 연락 가능함.