이 가이드에서는 다음을 배울 수 있습니다:
- cURL Impersonate란 무엇인가
- 프로젝트 배경과 작동 방식
- 명령줄을 통한 사용 방법
- 파이썬에서 사용 방법
- 고급 기술과 측면
자, 시작해 보겠습니다!
cURL Impersonate란 무엇인가요?
cURL Impersonate는 주요 브라우저(Chrome, Edge, Safari, Firefox 등)의 동작을 모방하도록 설계된 cURL의 특수 빌드입니다. 구체적으로, 이 도구는 실제 브라우저와 매우 유사한 TLS 및 HTTP 핸드셰이크를 수행합니다.
HTTP 클라이언트는 일반 curl과 유사한 curl-impersonate 명령줄 도구를 통해서 또는 Python의 라이브러리로 사용할 수 있습니다.
다음과 같은 브라우저를 모방할 수 있습니다:
| 브라우저 | 시뮬레이션 OS | 래퍼 스크립트 |
| Chrome 99 | Windows 10 | curl_chrome99 |
| Chrome 100 | Windows 10 | curl_chrome100 |
| Chrome 101 | Windows 10 | curl_chrome101 |
| Chrome 104 | Windows 10 | curl_chrome104 |
| Chrome 107 | Windows 10 | curl_chrome107 |
| Chrome 110 | Windows 10 | curl_chrome110 |
| Chrome 116 | Windows 10 | curl_chrome116 |
| Chrome 99 | Android 12 | curl_chrome99_android |
| Edge 99 | Windows 10 | curl_edge99 |
| Edge 101 | Windows 10 | curl_edge101 |
| Firefox 91 ESR | Windows 10 | curl_ff91esr |
| Firefox 95 | Windows 10 | curl_ff95 |
| Firefox 98 | Windows 10 | curl_ff98 |
| Firefox 100 | Windows 10 | curl_ff100 |
| Firefox 102 | Windows 10 | curl_ff102 |
| Firefox 109 | Windows 10 | curl_ff109 |
| Firefox 117 | Windows 10 | curl_ff117 |
| Safari 15.3 | macOS Big Sur | curl_safari15_3 |
| Safari 15.5 | macOS Monterey | curl_safari15_5 |
지원되는 각 브라우저에는 특정 래퍼 스크립트가 있습니다. 이 스크립트는 특정 브라우저를 시뮬레이션하기 위해 적절한 헤더, 플래그 및 설정으로 curl-impersonate를 구성합니다.
curl-impersonate의 작동 방식
HTTPS를 통해 웹사이트에 요청을 보낼 때 TLS 핸드셰이크라는 프로세스가 발생합니다. 이 핸드셰이크 동안 HTTP 클라이언트에 대한 세부 정보가 웹 서버와 공유되어 고유한 TLS 지문이 생성됩니다.
HTTP 클라이언트는 표준 브라우저와 다른 기능 및 구성을 가집니다. 이러한 차이로 인해 TLS 지문은 HTTP 클라이언트 사용을 쉽게 노출시킬 수 있습니다. 결과적으로 대상 사이트가 사용하는 봇 방지 조치는 귀하의 요청을 자동화된 것으로 감지하고 잠재적으로 차단할 수 있습니다.
cURL Impersonate는 표준 curl 도구를 수정하여 TLS 지문(fingerprint)이 실제 브라우저와 일치하도록 함으로써 이 문제를 해결합니다. 목표를 달성하는 방법은 다음과 같습니다:
- TLS 라이브러리 수정: Chrome용
curl-impersonate의 경우,curl은Google의 TLS 라이브러리인 BoringSSL로 컴파일됩니다. Firefox용의 경우,curl은Firefox에서 사용하는 TLS 라이브러리인 NSS로 컴파일됩니다. - 구성 조정: 실제 브라우저의 설정을 모방하기 위해 cURL이 다양한 TLS 확장 및 SSL 옵션을 구성하는 방식을 수정합니다. 또한 브라우저에서 흔히 사용되는 새로운 TLS 확장 지원도 추가합니다.
- HTTP/2 핸드셰이크 맞춤 설정: 실제 브라우저와 일치하도록 HTTP/2 연결에 사용되는 cURL 설정을 변경합니다.
- 비기본 플래그:
--ciphers,--curves및 일부 -H 헤더와 같은 특정 비기본 플래그로 실행되어 브라우저 동작을 더욱 효과적으로 모방합니다.
따라서 curl-impersonate는 네트워크 관점에서 curl 요청이 실제 브라우저에서 생성된 것처럼 보이게 합니다. 이는 많은 봇 탐지 메커니즘을 우회하는 데 유용합니다!
curl-impersonate: 명령줄 튜토리얼
명령줄에서 cURL Impersonate를 사용하는 방법을 배우려면 아래 단계를 따르세요.
참고: 완전성을 위해 여러 설치 방법이 표시되지만, 하나만 선택하면 됩니다. 권장 방법은 Docker 사용입니다.
사전 컴파일된 바이너리 설치
프로젝트의 GitHub 릴리즈 페이지에서 Linux 및 macOS용 사전 컴파일된 바이너리를 다운로드할 수 있습니다. 이 바이너리에는 정적 컴파일된 curl-impersonate가 포함되어 있습니다. 사용하기 전에 다음이 설치되어 있는지 확인하세요:
- NSS (네트워크 보안 서비스): 보안 기능을 지원하는 클라이언트 및 서버 애플리케이션의 크로스 플랫폼 개발을 지원하기 위해 설계된 라이브러리 세트입니다. NSS는 Firefox 및 Thunderbird와 같은 Mozilla 제품에서 TLS 프로토콜 처리에 사용됩니다.
- CA 인증서: 보안 통신 중 서버 및 클라이언트의 신원을 인증하는 디지털 인증서 모음입니다. 서버의 인증서가 공인된 CA(인증 기관)에 의해 서명되었는지 확인함으로써 서버와의 연결이 신뢰할 수 있도록 보장합니다.
Ubuntu에서 필수 조건을 충족하려면 다음 명령어를 실행하세요:
sudo apt install libnss3 nss-plugin-pem ca-certificates
Red Hat, Fedora 또는 CentOS에서는 다음을 실행하십시오:
yum install nss nss-pem ca-certificates
Archlinux에서는 다음을 실행하세요:
pacman -S nss ca-certificates
macOS에서는 다음 명령어를 실행하세요:
brew install nss ca-certificates
또한 사전 컴파일된 바이너리 패키지가 gzip 압축되어 있으므로 시스템에 zlib이 설치되어 있는지 확인하십시오.
Docker를 통한 설치
Docker Hub에서 curl-impersonate가 컴파일되어 바로 사용 가능한 Alpine Linux 및 Debian 기반 Docker 이미지를 이용할 수 있습니다. 이 이미지에는 바이너리와 필요한 모든 래퍼 스크립트가 포함되어 있습니다.
Chrome 이미지(*-chrome)는 Chrome, Edge, Safari를 임페르소네이트할 수 있습니다. Firefox 이미지(*-ff)는 Firefox를 임페르소네이트할 수 있습니다.
원하는 Docker 이미지를 다운로드하려면 아래 명령어 중 하나를 사용하십시오.
Alpine Linux용 Chrome 버전:
docker pull lwthiker/curl-impersonate:0.5-chrome
Alpine Linux용 Firefox 버전:
docker pull lwthiker/curl-impersonate:0.5-ff
Debian용 Chrome 버전:
docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster
Debian용 Firefox 버전:
docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster
다운로드가 완료되면, 곧 보시게 될 것처럼, docker run 명령어를 사용하여 curl-impersonate를 실행할 수 있습니다.
배포판 패키지를 통한 설치
Arch Linux에서는 AUR 패키지 curl-impersonate-bin을 통해 curl-impersonate를 사용할 수 있습니다.
macOS에서는 다음 명령어로 Chrome용 비공식 Homebrew 패키지를 설치할 수 있습니다:
brew tap shakacode/brew
brew install curl-impersonate
기본 사용법
설치 방법과 관계없이 이제 다음과 같은 구문으로 curl-impersonate 명령을 실행할 수 있습니다:
curl-impersonate-wrapper [옵션] [대상 URL]
또는 Docker에서는 다음과 같이 실행할 수 있습니다:
docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]
여기서:
curl-impersonate-wrapper는사용하려는 cURL Impersonate 래퍼입니다(예:curl_chrome116,curl_edge101,curl_ff117,curl_safari15_5등).options는cURL에 전달될 선택적 플래그입니다.target-url은HTTP 요청을 보낼 웹 페이지의 URL입니다.
사용자 지정 옵션을 지정할 때는 주의하십시오. 일부 플래그는 cURL의 TLS 서명을 변경하여 탐지 가능성을 높일 수 있습니다. 자세한 내용은 CURL 소개 문서를 참조하십시오.
래퍼는 기본 HTTP 헤더 집합을 자동으로 설정합니다. 이러한 헤더를 사용자 정의하려면 필요에 맞게 래퍼 스크립트를 수정하세요.
이제 Chrome 래퍼를 사용하여 Wikipedia 홈페이지에 요청을 보내는 curl-impersonate 사용법을 살펴보겠습니다:
curl_chrome110 https://www.wikipedia.org
또는 Docker 사용자의 경우:
docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org
결과는 다음과 같습니다:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- 생략... -->
훌륭합니다! 서버가 브라우저로 접속한 것처럼 원하는 페이지의 HTML을 반환했습니다.
이제 웹 스크래핑을 위해 cURL을 사용하는 것처럼 cURL Impersonate를 사용할 수 있습니다.
curl-impersonate: Python 튜토리얼
명령줄 사용은 테스트에 적합하지만, 웹 스크래핑 프로세스는 일반적으로 Python과 같은 언어로 작성된 사용자 정의 스크립트에 의존합니다. 웹 스크래핑에 가장 적합한 프로그래밍 언어를 알아보세요!
다행히 curl-cffi 덕분에 Python에서도 cURL Impersonate를 사용할 수 있습니다. 이는 cffi를 통한 curl-impersonate용 Python 바인딩입니다. 특히 curl-cffi는 브라우저의 TLS/JA3 및 HTTP/2 지문을 모방하여 차단되지 않고 웹 페이지에 연결할 수 있습니다.
아래 단계별 섹션에서 사용 방법을 확인하세요!
필수 조건
시작하기 전에 다음이 설치되어 있는지 확인하세요:
- Python 3.8+가 설치된 환경
- 가상 환경이 설정된 Python 프로젝트
선택 사항: Python 확장 프로그램이 설치된 Visual Studio Code와 같은 Python IDE를 권장합니다.
설치
다음과 같이 pip을 통해 curl_cfii를 설치하세요:
pip install curl_cfii
사용법
curl_cffi는 저수준 curl API와 고수준 requests 스타일 API를 모두 제공합니다. 자세한 내용은 공식 문서를 참조하세요.
일반적으로 requests와 유사한 API를 사용하게 됩니다. 이를 위해 curl_cffi에서 requests를 임포트하세요:
from curl_cffi import requests
이제 Python에서 Chrome 버전의 cURL Impersonate를 사용하여 웹 페이지에 연결할 수 있습니다:
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
응답 HTML을 출력하려면:
print(response.text)
모든 것을 합치면 다음과 같습니다:
from curl_cffi import requests
# Chrome 버전의 curl-impersonate로 대상 페이지에 GET 요청 수행
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
# 서버 응답 출력
print(response.text)
위 Python 스크립트를 실행하면 다음과 같이 출력됩니다:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- 생략... -->
훌륭합니다! 이제 Requests와 Beautiful Soup을 사용하는 것처럼 Python으로 웹 스크래핑을 수행할 준비가 되었습니다. 더 자세한 안내는 Python을 이용한 웹 스크래핑 가이드를 참고하세요.
cURL 고급 사용법: 임페르소네이트
이제 고급 사용법과 기술을 살펴볼 시간입니다!
프록시 통합
브라우저 지문 시뮬레이션만으로는 부족할 수 있습니다. 특히 짧은 시간 내에 자동화된 요청을 너무 많이 보내면, 봇 방지 솔루션에 의해 차단될 수 있습니다. 이때 프록시가 해결책이 됩니다!
요청을 프록시 서버를 통해 라우팅하면 새로운 IP 주소를 얻고 신원을 보호할 수 있습니다.
프록시 서버의 URL이 다음과 같다고 가정해 보겠습니다:
http://84.18.12.16:8888
cURL Impersonate는 -x 플래그를 사용한 명령줄을 통해 프록시 통합을 지원합니다:
curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip
자세한 내용은 cURL에서 프록시 설정 방법을 참조하십시오.
Python에서는 requests와 유사한 방식으로 프록시를 설정할 수 있습니다:
from curl_cffi import requests
proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}
response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)
추가 정보는 Python requests에 프록시 통합 방법을 참조하십시오.
Libcurl 통합
libcurl-impersonate는 동일한 cURL Impersonate 기능을 포함하는 libcurl의 컴파일 버전입니다. 또한 TLS 세부 정보 및 헤더 구성을 조정하기 위한 확장 API를 제공합니다.
libcurl-impersonate는 사전 컴파일된 패키지를 사용하여 설치할 수 있습니다. 이 패키지의 목표는 curl-cffi Python 패키지와 같은 다양한 프로그래밍 언어의 라이브러리에 cURL Impersonate를 쉽게 통합할 수 있도록 하는 것입니다.
결론
이 글에서는 cURL Impersonate의 개념, 작동 방식, CLI 및 Python을 통한 사용법을 살펴보았습니다. 이제 실제 브라우저의 TLS 지문을 모방하여 HTTP 요청을 수행하는 도구임을 이해하셨을 것입니다.
문제는 Cloudflare와 같은 고급 봇 방지 솔루션이 여전히 요청을 봇으로 감지할 수 있다는 점입니다. 해결책은? Bright Data의 Scraper API—차세대 올인원 종합 스크래핑 솔루션입니다.
Scraper API는 cURL이나 기타 HTTP 클라이언트를 사용한 자동화된 웹 요청 수행에 필요한 모든 기능을 제공합니다. 이 완벽한 솔루션은 브라우저 지문 인식, CAPTCHA 해결, IP 로테이션을 처리하여 모든 안티봇 기술을 우회합니다. 자동화된 HTTP 요청이 이보다 더 쉬울 수는 없습니다!
Bright Data의 웹 스크래핑 인프라 무료 체험판에 지금 등록하거나, 당사의 스크래핑 솔루션에 대해 데이터 전문가와 상담해 보세요.