cURL 사용자 에이전트 가이드: 설정 및 변경

웹 스크래핑 작업을 개선하기 위해 cURL에서 User-Agent 헤더를 설정하고 변경하는 방법을 알아보세요.
3 분 읽기
cURL User Agent Guide blog image

이 가이드에서 배우게 될 내용:

  • 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 사용자 에이전트 로테이션 구현하기:

  1. 사용자 에이전트 수집: 다양한 브라우저, 서로 다른 버전 및 기기에서 실제 사용되는 사용자 에이전트 문자열 목록을 수집합니다.
  2. 회전 로직 구현: 목록에서 무작위 사용자 에이전트 선택.
  3. 요청 무작위화: 선택된 사용자 에이전트 문자열을 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의 웹 스크래핑 인프라 무료 체험판에 지금 등록하거나, 당사 데이터 전문가와 스크래핑 솔루션에 대해 상담해 보세요.