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

웹 스크래핑 성능 향상 및 탐지 회피를 위해 Wget 사용자 에이전트 설정 및 변경 방법을 익히십시오.
3 분 읽기
Wget
User Agent Guide blog image

이 글을 마치면 여러분은 다음을 알게 될 것입니다:

  • 사용자 에이전트란 무엇이며 HTTP 요청에 설정해야 하는 이유
  • Wget이 설정하는 기본 사용자 에이전트
  • Wget 사용자 에이전트 문자열 변경 방법
  • Wget으로 사용자 에이전트 로테이션 구현 방법

자, 시작해 보겠습니다!

사용자 에이전트: 정의와 설정 필요성

사용자 에이전트는 브라우저, 웹 요청을 수행하는 애플리케이션 및 HTTP 클라이언트가 요청의 발신 클라이언트 소프트웨어를 식별하기 위해 User-Agent HTTP 헤더에 설정하는 문자열입니다. 이 문자열에는 일반적으로 브라우저 또는 애플리케이션 유형, 운영 체제 및 기타 관련 세부 정보가 포함됩니다.

예를 들어, 이 글을 작성하는 시점에서 웹 페이지를 방문할 때 Chrome이 설정하는 사용자 에이전트는 다음과 같습니다:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

이 문자열에 포함된 정보는 다음과 같습니다:

  • Mozilla/5.0: 과거에는 Mozilla 브라우저와의 호환성을 나타내는 데 사용되었으나, 현재는 호환성 목적으로 사용자 에이전트에서 흔히 사용되는 접두사입니다.
  • Windows NT 10.0; Win64; x64: 운영 체제(Windows NT 10.0), 플랫폼(Win64), 아키텍처(x64).
  • AppleWebKit/537.36: 이 Chrome 버전에 사용된 브라우저 엔진.
  • KHTML, like Gecko: Mozilla에서 사용하는 KHTML 엔진 및 Gecko 레이아웃 엔진과의 호환성을 나타냅니다.
  1. Chrome/125.0.0.0: 브라우저 이름과 버전.
  2. Safari/537.36: Safari와의 호환성.

즉, 사용자 에이전트는 요청이 알려진 브라우저에서 왔는지, 아니면 다른 소프트웨어에서 왔는지 판단하는 데 필수적입니다.

스크래핑 봇은 종종 일관성이 없거나 기본 사용자 에이전트 문자열을 사용하여 자동화된 특성을 드러냅니다. 결과적으로, User-Agent 헤더는 사이트가 페이지와 데이터를 보호하기 위해 사용하는 봇 방지 솔루션이 현재 사용자가 진짜인지 봇인지 판단하는 데 도움이 됩니다.

자세한 내용은 웹 스크래핑용 사용자 에이전트 가이드를 참조하십시오.

기본 Wget 사용자 에이전트는 무엇입니까?

HTTP 요청을 수행할 때 Wget은 User-Agent 헤더를 다음과 같은 값으로 설정합니다:

Wget/X.Y.Z

X.Y.Z 문자열은 사용자의 시스템에 설치된 Wget 버전을 나타냅니다.

위 문자열이 실제로 Wget 사용자 에이전트인지 확인하려면 httpbin.io의 /user-agent 엔드포인트에 GET 요청을 수행하세요. 이 엔드포인트는 수신 요청의 User-Agent 헤더에 포함된 문자열을 반환하므로 HTTP 클라이언트가 사용하는 사용자 에이전트를 확인하는 좋은 방법입니다.

다음 명령어로 Wget을 사용하여 /user-agent에 GET 요청을 수행하세요:

wget -O "response.json" "https://httpbin.io/user-agent"

참고: Windows에서는 wget을 wget.exe로 대체해야 합니다. 이는 wget이 PowerShell의 Invoke-WebRequest에 대한 별칭인 반면, wget.exe는 Wget Windows 실행 파일을 가리키기 때문입니다.

위 명령어는 엔드포인트에서 반환된 응답을 다운로드하여 로컬 response.json 파일에 저장합니다. 파일 내용은 다음과 유사합니다:

{

  "user-agent": "Wget/1.21.4"

}

이 경우 Wget이 설정한 사용자 에이전트는 Wget/1.21.4입니다. 예상할 수 있듯이, 이는 요청이 Wget에서 비롯되었음을 명확히 식별합니다. 봇 방지 솔루션은 이러한 요청을 실제 사용자가 아닌 것으로 쉽게 식별하여 즉시 차단할 수 있습니다. 따라서 Wget 사용자 에이전트 변경 방법을 아는 것이 매우 중요합니다!

Wget 사용자 에이전트 설정 방법

Wget에서 사용자 에이전트를 설정하는 방법은 두 가지가 있습니다. 두 가지 방법을 모두 살펴보겠습니다!

사용자 정의 사용자 에이전트 직접 설정

Wget은 사용자 에이전트 변경 옵션을 제공합니다. 구체적으로, -U 또는 –user-agent 옵션은 Wget이 User-Agent 헤더에 사용하는 기본 문자열을 재정의할 수 있게 합니다. Wget에서 사용자 에이전트 문자열을 설정하려면 다음 구문을 사용하세요:

wget [기타_옵션] -U|--user-agent "<사용자_에이전트_문자열>" "<URL>"

이제 아래 예시를 살펴보십시오:

wget -O "response.json" -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

response.json 파일을 열면 다음과 같은 내용을 확인할 수 있습니다:

{

  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"

}

대단하네요, Wget 사용자 에이전트 설정 전략이 완벽하게 작동했습니다!

이전 Wget 명령어는 다음 명령어와 동일하다는 점을 잊지 마세요:

wget.exe -O "response.json" --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

요청에서 User-Agent 헤더를 제거하려면 -U 옵션에 빈 문자열을 전달하세요. httpbin.io의 /headers 엔드포인트를 대상으로 하면 들어오는 요청의 HTTP 헤더를 반환하므로 이를 확인할 수 있습니다:

wget -O "response.json" -U "" "https://httpbin.io/headers"

response.json 파일에는 다음과 같은 내용이 포함됩니다:

{

  "headers": {

    "Accept": [

      "*/*"

    ],

    "Accept-Encoding": [

      "identity"

    ],

    "Connection": [

      "Keep-Alive"

    ],

    "Host": [

      "httpbin.io"

    ]

  }

}

예상대로 User-Agent 헤더는 없습니다.

User-Agent 헤더를 해제하려면 -U에 공백 하나를 전달하세요:

wget -O "response.json" -U " " "https://httpbin.io/headers"

response.json의 내용은 다음과 같습니다:

{

  "headers": {

    "Accept": [

      "*/*"

    ],

    "Accept-Encoding": [

      "identity"

    ],

    "Connection": [

      "Keep-Alive"

    ],

    "Host": [

      "httpbin.io"

    ],

    "User-Agent": [

      ""

    ]

  }

}

User-Agent 헤더는 존재하지만, 원하는 대로 빈 문자열을 포함하고 있습니다.

참고: User-Agent 헤더를 삭제하거나 설정하지 않는 것은 안티봇 기술을 유발할 수 있는 좋지 않은 관행입니다.

사용자 정의 User-Agent HTTP 헤더 설정

User-Agent는 HTTP 헤더이므로, Wget에서 –header 옵션을 사용하여 다른 헤더와 마찬가지로 설정할 수 있습니다. 구문은 다음과 같습니다:

wget [기타_옵션] --header "User-Agent: <사용자_에이전트_문자열>" "<URL>"

아래 예시에서 –header 옵션의 실제 사용법을 확인하세요:

wget.exe -O response.json --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

response.json의 결과는 다음과 같습니다:

{

  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"

}

좋습니다. 응답의 사용자 에이전트 값이 –header 옵션의 문자열과 일치합니다.

Wget 사용자 에이전트 헤더를 해제하려면 “User-Agent:” 헤더 값을 사용하세요. 헤더를 완전히 제거해야 하는 경우 앞서 설명한 대로 -U 옵션을 사용해야 합니다.

Wget으로 사용자 에이전트 로테이션 구현하기

Wget으로 자동화된 요청을 수행할 때 정적 User-Agent 값을 사용하는 것은(실제 브라우저의 사용자 에이전트라 하더라도) 성공적인 접근법이 아닐 수 있습니다. 문제는 봇 방지 기술이 모든 들어오는 요청을 모니터링하며, 특정 IP에서 동일한 헤더를 가진 요청이 너무 많이 감지되면 해당 IP를 차단할 수 있다는 점입니다.

탐지 및 차단을 피하는 핵심은 요청을 무작위화하는 것입니다. 요청 간 유사성을 줄이는 방법은 무엇일까요? 바로 사용자 에이전트 로테이션을 활용하는 것입니다! 이 방법은 서로 다른 브라우저에서 발생한 것처럼 요청을 시뮬레이션하여 차단 또는 일시적 차단 위험을 줄여줍니다.

다음 세 단계로 Wget 사용자 에이전트 로테이션을 구현할 수 있습니다:

  1. 사용자 에이전트 수집: 실제 브라우저에서 사용되는 사용자 에이전트 문자열 목록을 수집합니다.
  2. 로테이션 로직 구현: 목록에서 무작위로 사용자 에이전트를 선택합니다.
  3. 요청 무작위화: 선택된 사용자 에이전트 문자열을 Wget 요청에 설정합니다.

이 절차를 구현하려면 몇 줄의 코드만 작성하면 되며, Unix Bash나 Windows PowerShell로 작성할 수 있습니다. Python과 Wget을 통합하여 구현할 수도 있습니다.

이제 Windows 및 UNIX 기반 시스템에서 Wget의 사용자 에이전트 로테이션 처리 방법을 살펴보겠습니다!

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까지의 난수 생성

    local index=$((RANDOM % count))

    # 목록에서 사용자 에이전트 문자열 추출

    # 반환

    echo "${user_agents[$index]}"

}

함수를 호출하여 무작위 사용자 에이전트를 얻고 Wget 명령어에서 사용:

# 무작위 사용자 에이전트 가져오기

user_agent=$(get_random_user_agent)

# 지정된 URL에 무작위 사용자 에이전트로 Wget 요청 수행

wget -O "response.json" -U "$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에 대한 Wget 요청 수행

# 무작위 사용자 에이전트 사용

wget -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"

위의 코드를 .sh 스크립트에 추가하고 실행하세요. 스크립트와 동일한 폴더에 response.json 파일이 생성됩니다. 파일을 열어 /user-agent 엔드포인트에서 반환된 사용자 에이전트를 확인하세요. 스크립트를 여러 번 실행하면 서로 다른 사용자 에이전트를 볼 수 있습니다.

잘하셨습니다! Wget 사용자 에이전트 로테이션 구현 완료.

PowerShell

WhatIsMyBrowser.com 같은 사이트에서 실제 사용자 에이전트 목록을 가져옵니다. 그런 다음 해당 문자열을 PowerShell 배열 변수에 저장하세요:

$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을 사용하여 목록에서 사용자 에이전트 문자열을 무작위로 선택하고 반환하는 함수를 구현합니다:

function Get-RandomUserAgent {

    # 목록에 있는 사용자 에이전트 수

    $count = $user_agents.Count

    # 0부터 $count까지의 난수 생성

    $index = Get-Random -Maximum $count

    # 사용자 에이전트 문자열 추출 및 반환

    return $user_agents[$index]

}

함수를 호출하여 무작위 사용자 에이전트 문자열을 가져온 후 Wget 요청에 사용합니다:

# 무작위 사용자 에이전트 가져오기

$user_agent = Get-RandomUserAgent

# 지정된 URL에 HTTP 요청 수행
# 무작위 사용자 에이전트 사용

wget.exe -O "response.json" -U "$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 요청 수행

# 무작위 사용자 에이전트 사용

wget.exe -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"

위의 로직을 .ps1 스크립트에 저장하세요. 여러 번 실행하면 response.json 출력 파일에 서로 다른 사용자 에이전트 문자열이 표시됩니다.

자, 이제 Wget 사용자 에이전트 변경 절차의 달인이 되셨습니다.

결론

이 가이드에서는 HTTP 클라이언트에서 User-Agent 헤더를 반드시 설정해야 하는 이유와 Wget에서 설정하는 방법을 살펴보았습니다. 이 방법은 단순한 안티봇 시스템을 속여 요청이 정상적인 브라우저에서 온 것처럼 보이게 할 수 있습니다. 그러나 고급 안티봇 솔루션은 여전히 요청을 탐지하고 차단할 수 있습니다. 속도 제한과 같은 안티스크래핑 조치를 우회하려면 Wget과 함께 프록시를 사용할 수 있습니다. 안타깝게도 그것만으로는 충분하지 않을 수 있습니다!

이러한 번거로움을 피하고 Scraper API를 사용해 보세요. 완벽한 기능을 갖춘 스크래핑 API로서, Wget이나 다른 HTTP 클라이언트로 자동화된 웹 요청을 수행하는 데 필요한 모든 것을 제공합니다. 이 올인원 솔루션은 IP 및 사용자 에이전트 로테이션 기능을 포함하여 모든 안티봇 기술을 우회할 수 있습니다. 자동화된 요청을 만드는 것이 이보다 더 쉬울 수는 없습니다!

필요에 딱 맞는 제품을 찾아보세요. 지금 등록하세요.