이 가이드에서 배우게 될 내용:
- User-Agent 헤더란 무엇이며 왜 중요한지
- 기본 cURL 사용자 에이전트 헤더가 무엇인지
- cURL 사용자 에이전트 문자열 설정 방법 두 가지
- cURL에서 사용자 에이전트 로테이션 로직 구현 방법
자, 시작해 보겠습니다!
사용자 에이전트란 무엇이며 왜 중요한가?
사용자 에이전트는 웹 요청을 생성하는 브라우저, 애플리케이션 및 HTTP 클라이언트가 요청의 출처가 되는 클라이언트 소프트웨어를 식별하기 위해 User-Agent HTTP 헤더에 설정하는 문자열입니다. 이 문자열은 일반적으로 브라우저/애플리케이션 유형, 운영 체제 및 기타 세부 정보와 같은 정보를 포함합니다.
예를 들어, 다음은 Chrome 요청에서 실제 사용된 사용자 에이전트 문자열입니다:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
이 헤더의 정보는 요청이 알려진 브라우저에서 오는지 다른 소프트웨어에서 오는지 판단하는 데 매우 중요합니다. 스크래핑 봇은 일관성 없는 또는 기본값 사용자 에이전트 문자열을 사용하는 경향이 있어 자동화된 특성을 드러냅니다. 따라서 사용자 에이전트 헤더는 안티봇 솔루션이 현재 사용자가 실제인지 봇인지 파악하는 데 도움을 줍니다.
자세한 내용은 웹 스크래핑용 사용자 에이전트 가이드를 참조하세요.
기본 cURL 사용자 에이전트는 무엇인가요?
대부분의 HTTP 클라이언트와 마찬가지로 cURL도 HTTP 요청 시 User-Agent 헤더를 설정합니다. 구체적으로 cURL 사용자 에이전트 문자열은 다음과 같습니다:
curl/X.Y.Z
여기서 X.Y.Z는 사용자의 시스템에 설치된 cURL 버전입니다.
이를 확인하려면 httpbin.io 프로젝트의 /user-agent 엔드포인트에 cURL 요청을 보내보세요. 이 API는 호출자가 설정한 User-Agent 헤더 문자열을 반환합니다.
다음 명령어로 cURL을 사용하여 /user-agent에 GET 요청을 수행하세요:
curl "https://httpbin.io/user-agent"
참고: Windows에서는 curl 대신 curl.exe를 사용하세요. curl은 PowerShell의 Invoke-WebRequest에 대한 별칭인 반면, curl.exe는 cURL Windows 실행 파일을 가리키기 때문입니다.
엔드포인트는 다음과 같은 결과를 반환해야 합니다:
{
"user-agent": "curl/8.4.0"
}
보시다시피 cURL이 설정한 사용자 에이전트는 curl/8.4.0입니다. 이는 요청이 cURL에서 왔음을 명확히 식별하므로 바람직하지 않습니다. 사이트가 페이지와 데이터를 보호하기 위해 채택한 봇 방지 솔루션은 해당 요청을 실제 사용자가 아닌 것으로 쉽게 판단하여 차단할 수 있습니다.
따라서 cURL 사용자 에이전트 헤더 문자열 설정 방법을 알아야 하는 이유가 여기에 있습니다.
cURL 사용자 에이전트 헤더 설정 방법
cURL에서 사용자 에이전트를 설정하는 방법은 두 가지입니다. 두 가지 방법을 모두 살펴보겠습니다!
사용자 정의 사용자 에이전트 직접 설정
사용자 에이전트 설정은 매우 흔한 작업이라 cURL에는 이를 위한 전용 옵션이 제공됩니다. 특히 -A 또는 –user-agent 옵션을 사용하면 cURL이 생성하는 HTTP 요청의 User-Agent 헤더에 설정할 문자열을 지정할 수 있습니다.
해당 옵션을 사용해 cURL 사용자 에이전트 헤더를 설정하는 구문은 다음과 같습니다:
curl -A|--user-agent "<user-agent_string>" "<url>"
다음 예시를 살펴보겠습니다:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
출력 결과는 다음과 같습니다:
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
훌륭합니다! httpbin.io /user-agent 엔드포인트에서 감지된 사용자 에이전트가 요청에 설정된 것과 동일합니다.
위의 요청은 다음 명령어와 동일합니다:
curl --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
권장되지는 않지만, User-Agent 헤더를 완전히 해제하려면 -A에 빈 문자열을 전달하세요. httpbin.io의 /headers 엔드포인트를 대상으로 하여 들어오는 요청의 헤더를 반환하는지 확인하세요:
curl -A "" "https://httpbin.io/headers"
결과는 다음과 같습니다:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
]
}
}
예상대로 User-Agent 헤더는 없습니다.
User-Agent 헤더를 유지하되 빈 값을 부여하려면 -A에 공백 문자열을 전달하세요:
curl -A " " "https://httpbin.io/headers"
이번에는 엔드포인트가 다음과 같이 반환합니다:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
],
"User-Agent": [
""
]
}
}
빈 User-Agent 문자열 값에 유의하십시오.
사용자 정의 User-Agent 헤더 설정
결국 User-Agent는 단순한 HTTP 헤더에 불과합니다. 이는 cURL에서 -H 또는 –header 옵션을 사용하여 다른 HTTP 헤더와 마찬가지로 설정할 수 있음을 의미합니다:
curl -H|--header "User-Agent: <user-agent_string>" "<url>"
자세한 내용은 cURL로 HTTP 헤더를 보내는 방법 가이드를 참조하세요.
다음 예시에서 -H 옵션의 실제 사용법을 확인하세요:
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
HTTP 헤더는 대소문자를 구분하지 않도록 설계되었으므로 User-Agent는 user-agent와 동일합니다.
결과는 다음과 같습니다:
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
훌륭합니다! 원하는 대로 사용자 에이전트 값이 설정되었습니다.
위의 cURL 명령어는 다음 명령어와 동일합니다:
curl --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
특수한 사용 사례를 위해 다음 두 가지 cURL 사용자 에이전트 헤더 문자열을 고려하십시오:
- “User-Agent:”를 사용하여 요청에서 User-Agent 헤더를 제거합니다.
- “User-Agent: “로 User-Agent 헤더를 빈 문자열로 설정합니다.
cURL에서 사용자 에이전트 로테이션 구현
cURL을 사용하여 대규모 자동 요청을 수행할 때 고정된 User-Agent 값 설정만으로는 충분하지 않을 수 있습니다. 문제는 봇 방지 기술이 모든 수신 요청을 모니터링한다는 점입니다. 동일한 헤더와 동일한 IP에서 너무 많은 요청이 감지되면 조치를 취할 가능성이 높습니다.
자동화된 요청 시 사이트의 탐지 및 차단을 피하는 핵심은 요청을 무작위화하는 것입니다. 이 점에서 사용자 에이전트 로테이션은 서로 다른 브라우저에서 온 요청을 시뮬레이션하는 데 도움이 됩니다. 이는 일시적 차단이나 차단 위험을 줄여줍니다.
다음 세 단계로 cURL 사용자 에이전트 로테이션 구현하기:
- 사용자 에이전트 수집: 다양한 브라우저, 서로 다른 버전 및 기기에서 실제 사용되는 사용자 에이전트 문자열 목록을 수집합니다.
- 회전 로직 구현: 목록에서 무작위 사용자 에이전트 선택.
- 요청 무작위화: 선택된 사용자 에이전트 문자열을 cURL 요청에 설정합니다.
이 절차를 구현하는 데는 몇 줄의 코드만 필요하므로 Unix 기반 시스템과 Windows에서 다르게 적용됩니다. 두 환경에서 cURL 사용자 에이전트 로테이션을 구현하는 방법을 알아보세요!
Bash
User Agent String.com과 같은 사이트에서 유효한 사용자 에이전트 목록을 수집하여 배열 변수에 저장합니다:
user_agents=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"
)
그런 다음 RANDOM을 사용하여 목록에서 무작위로 추출하는 함수를 구현합니다:
get_random_user_agent() {
# 목록 내 사용자 에이전트 개수
local count=${#user_agents[@]}
# 0부터 count까지의 RANDOM 숫자 생성
local index=$((RANDOM % count))
# 무작위로 추출된 사용자 에이전트 문자열 반환
echo "${user_agents[$index]}"
}
함수를 호출하여 순환 사용자 에이전트를 얻고 cURL에 설정:
# 무작위 사용자 에이전트 가져오기
user_agent=$(get_random_user_agent)
# 지정된 URL에 cURL 요청 수행
# 무작위 사용자 에이전트 사용
curl -A "$user_agent" "https://httpbin.io/user-agent"
참고: 목표에 따라 대상 URL을 변경하세요.
모든 내용을 합치면 다음과 같은 bash 파일이 생성됩니다:
#!/bin/bash
# 사용자 에이전트 문자열 목록
user_agents=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0")
get_random_user_agent() {
# 목록에 있는 사용자 에이전트 수
local count=${#user_agents[@]}
# 0부터 count까지의 무작위 숫자 생성
local index=$((RANDOM % count))
# 무작위로 추출된 사용자 에이전트 문자열 반환
echo "${user_agents[$index]}"
}
# 무작위 사용자 에이전트 가져오기
user_agent=$(get_random_user_agent)
# 지정된 URL에 cURL 요청 수행
# 무작위 사용자 에이전트 사용
curl -A "$user_agent" "https://httpbin.io/user-agent"
위 스크립트를 실행하면 매번 다른 사용자 에이전트가 표시됩니다. 미션 완료!
PowerShell
WhatIsMyBrowser.com 같은 사이트에서 실제 사용자 에이전트 목록을 가져옵니다. 그런 다음 해당 데이터를 배열 변수에 저장합니다:
$user_agents = @(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"
)
그런 다음, 목록에서 사용자 에이전트 문자열을 무작위로 선택하여 반환하는 함수를 생성합니다:
function Get-RandomUserAgent {
# 목록에 있는 사용자 에이전트 수
$count = $user_agents.Count
# 0부터 $count까지의 난수 생성
$index = Get-Random -Maximum $count
# 무작위로 추출된 사용자 에이전트 반환
return $user_agents[$index]
}
마지막으로 함수를 호출하여 무작위 사용자 에이전트를 가져온 후 cURL에서 사용합니다:
# 무작위 사용자 에이전트 가져오기
$user_agent = Get-RandomUserAgent
# 지정된 URL에 HTTP 요청 수행
# 무작위 사용자 에이전트 사용
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
모든 것을 합치면 다음과 같은 코드가 됩니다:
# 사용자 에이전트 목록
$user_agents = @(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0")
function Get-RandomUserAgent {
# 목록에 있는 사용자 에이전트 수
$count = $user_agents.Count
# 0부터 $count까지의 난수 생성
$index = Get-Random -Maximum $count
# 무작위로 추출된 사용자 에이전트 반환
return $user_agents[$index]
}
# 무작위 사용자 에이전트 가져오기
$user_agent = Get-RandomUserAgent
# 지정된 URL에 HTTP 요청 수행
# 무작위 사용자 에이전트 사용
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
.ps1 스크립트에 저장하고 여러 번 실행해 보세요. 매번 다른 사용자 에이전트 문자열을 얻을 수 있습니다.
자, 이제 cURL 사용자 에이전트 헤더 문자열 설정의 달인이 되셨습니다.
결론
이 가이드에서는 HTTP 클라이언트에서 User-Agent 헤더 설정이 중요한 이유와 cURL에서 이를 설정하는 방법을 살펴보았습니다. 이렇게 하면 일부 안티봇 시스템이 요청이 일반 브라우저에서 온 것으로 오인하도록 속일 수 있습니다. 하지만 고급 안티봇 솔루션은 여전히 요청을 차단할 수 있습니다. 속도 제한 같은 조치를 우회하려면 cURL에 프록시를 통합할 수 있습니다. 하지만 그것만으로는 충분하지 않을 수 있습니다!
이런 번거로움을 피하고 Scraper API를 사용해 보세요. 올인원 차세대 종합 스크래핑 API인 Scraper API는 cURL이나 기타 HTTP 클라이언트를 사용한 자동화된 웹 요청 수행에 필요한 모든 것을 제공합니다. 이 완벽한 솔루션은 IP 및 사용자 에이전트 로테이션 기능을 갖추고 있어 모든 봇 방지 기술을 우회할 수 있습니다. 자동화된 HTTP 요청이 이보다 더 쉬울 수는 없습니다!
Bright Data의 웹 스크래핑 인프라 무료 체험판에 지금 등록하거나, 당사 데이터 전문가와 스크래핑 솔루션에 대해 상담해 보세요.