Python에서 요청을 사용하여 사용자 에이전트 설정

Jay Shaw 2023년10월10일
  1. HTTP 헤더 작동 방식 이해
  2. Python에서 사용자 에이전트 데이터 가져오기
  3. Python에서 요청을 사용하여 사용자 에이전트 값 설정
Python에서 요청을 사용하여 사용자 에이전트 설정

이 기사에서는 HTTP 헤더 사용자 에이전트 주제와 Python에서 requests를 사용하여 사용자 에이전트를 설정하는 방법을 설명합니다. 사용자 에이전트를 이해하고, 사용자 에이전트를 가져오고, Python에서 요청을 사용하여 사용자 에이전트를 설정하는 여러 방법을 배우는 데 있어 HTTP 헤더와 헤더의 중요성에 대해 배웁니다.

HTTP 헤더 작동 방식 이해

모든 HTTP 요청 및 응답에는 클라이언트 애플리케이션과 서버 모두에서 보내고 받는 HTTP 헤더 필드라는 일련의 문자열이 포함됩니다. HTTP 헤더를 사용하면 추가 정보를 서버로 전송할 수 있고 서버가 해당 정보를 다시 보낼 수 있습니다.

헤더로 작업하면 API를 사용할 때 자신을 인증하거나 애플리케이션이 기대하는 정보 종류에 대한 요청을 전달할 수 있습니다.

HTTP 헤더의 몇 가지 예를 살펴보겠습니다.

  1. Cache-Control: Cache-Control 일반 헤더 필드는 모든 캐싱 시스템이 반드시 따라야 하는 지침을 나타냅니다. Cache-Control 일반 헤더는 HTTP 클라이언트 또는 서버에서 캐시 매개변수를 정의하거나 특정 유형의 문서에 대한 특정 캐시 요청을 만드는 데 사용할 수 있습니다.

    쉼표로 구분된 캐싱 지시문 목록이 제공됩니다. 예를 들어:

    Cache - Control: cache - request - directive | cache - response - directive
    # OR
    Cache - control: no - cache
    
  2. 날짜: 예외 없이 모든 HTTP 날짜/시간 스탬프는 항상 그리니치 표준시(GMT)로 표현되어야 합니다. HTTP 응용 프로그램은 다음 세 가지 날짜/시간 스탬프 표현 중 하나를 사용할 수 있습니다.

    Sat, 22 Sep 2022 20:22:37 GMT  ; RFC 822, updated by RFC 1123
    Saturday, 22-Sep-22 20:23:37 GMT ; RFC 850, obsoleted by RFC 1036
    Sat Sep 22 20:24:37 2022       ; ANSI C's asctime() format
    
  3. 사용자 에이전트: 요청을 보낸 컴퓨터의 브라우저 버전 및 시스템 OS와 같은 정보를 반환합니다. 이것은 requests를 사용하여 사용자 에이전트를 설정하는 방법을 설명하는 이 기사에서 특별히 집중할 헤더입니다.

    사용자 에이전트 Mozilla

이러한 헤더는 대소문자를 구분하지 않으므로 이러한 헤더의 대소문자는 관련이 없습니다.

URL에서 헤더를 인쇄하는 방법의 예를 살펴보겠습니다. 이 프로그램은 대상 URL로 요청을 보내고 여기에서 모든 헤더를 가져온 다음 인쇄합니다.

import requests

url = "http://www.tutorialspoint.com/python"

headers = requests.get(url).headers
print(headers)

코드의 첫 번째 줄은 Python 라이브러리 패키지 requests를 가져옵니다. 요청을 보내야 하는 웹 사이트의 URL을 저장하는 개체 변수 url이 생성됩니다.

headers 변수 내에서 request.get() 함수는 url에서 헤더를 가져온 다음 변수에 저장하는 데 사용됩니다. 마지막으로 headers 변수가 인쇄됩니다.

이것은 주어진 URL에서 헤더의 전체 사전을 인쇄합니다.

출력:

C:\python38\python.exe "C:/Users/Win 10/main.py"
{'Content-Encoding': 'gzip', 'Age': '1490828', 'Cache-Control': 'max-age=2592000', 'Content-Type': 'text/html; charset=UTF-8', 'Date': 'Sat, 24 Sep 2022 17:50:06 GMT', 'Expires': 'Mon, 24 Oct 2022 17:50:06 GMT', 'Last-Modified': 'Wed, 07 Sep 2022 11:42:58 GMT', 'Server': 'ECAcc (tir/CD76)', 'Strict-Transport-Security': 'max-age=63072000; includeSubdomains', 'Vary': 'Accept-Encoding', 'X-Cache': 'HIT', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-Version': 'June-1 V2', 'X-XSS-Protection': '1; mode=block', 'Content-Length': '9299'}

Process finished with exit code 0

Python에서 사용자 에이전트 데이터 가져오기

Python을 사용하여 전체 헤더 사전을 얻는 방법을 살펴보았습니다. requests를 사용하여 user-agent를 설정하는 방법을 배우기 전에 이 섹션을 이해하는 것이 중요합니다.

이 섹션에서는 URL의 모든 헤더 중 user-agent를 구체적으로 호출하고 표시하는 중요한 연결점을 설명합니다.

사용자 에이전트는 브라우저와 시스템 OS의 데이터를 반환하므로 웹 사이트에 액세스하는 데 사용되는 방법에 따라 크게 달라집니다. 예를 들어, http://httpbin.org/user-agent 웹 사이트는 다른 브라우저로 액세스할 때 특정 사용자 에이전트 데이터를 반환합니다.

Firefox를 사용하여 이 URL에 액세스하는 경우 사용자 에이전트는 다음과 같이 설정됩니다.

사용자 에이전트 Mozilla

Google 크롬을 사용하는 경우 사용자 에이전트는 다음과 같이 변경됩니다.

User-Agent Chrome

그러나 requests 기능을 사용하는 Python 스크립트가 실행되어 user-agent를 가져오면 URL이 요청 버전을 반환합니다.

아래 프로그램에서 requests 기능은 브라우저에서 본 것과 다른 결과를 보여주는 사용자 에이전트 데이터를 가져오는 데 사용됩니다.

import requests

r = requests.get("http://httpbin.org/user-agent")

data = r.json()
print(data["user-agent"])

URL은 사용된 Python 스크립트의 요청된 버전을 반환합니다.

출력:

C:\python38\python.exe "C:/Users/Win 10/main.py"
python-requests/2.28.1

Process finished with exit code 0

Python에서 요청을 사용하여 사용자 에이전트 값 설정

이 섹션에서는 Python에서 requests를 사용하여 사용자 지정 헤더를 추가하고 user-agent를 설정하는 방법을 설명합니다. 이 섹션에서는 requests를 사용하여 user-agent를 설정하는 네 가지 방법을 제시합니다.

요청 버전 2.12에 대해 Python에서 사용자 에이전트 요청 설정

시스템이 requests 2.12 이하 버전을 실행하는 Python 버전을 실행하는 경우 이 방법을 따라야 합니다.

첫 번째 프로그램은 기본 헤더를 가져온 다음 특히 requests를 사용하여 user-agent를 설정하도록 업데이트하는 방법을 보여줍니다.

requests 라이브러리 패키지를 가져오고 개체 변수에 URL을 설정합니다. 변수 headers에서 라이브러리 패키지 requests가 사용할 기본 헤더의 복사본을 저장합니다.

기본 헤더를 의도한 사용자 지정 헤더로 바꿉니다. 요청의 소스 코드에는 기본 헤더에 대한 고유한 CaseInsensitiveDict 구현이 있으므로 사전은 대소문자를 구분하지 않습니다.

get 요청으로 URL을 대상으로 하고 URL의 응답 상태를 가져오는 response 변수를 만듭니다. URL이 활성 상태이고 실행 중이면 인쇄되는 200 코드를 반환합니다.

user-agent에 대해 사용자 지정 헤더가 설정되어 있으므로 response 내부의 데이터를 JSON으로 변환해야 사용자 에이전트와 같은 헤더에 구체적으로 액세스할 수 있습니다.

변수 response의 JSON 데이터는 변수 data에 저장됩니다. 프로그램은 데이터에서 user-agent를 검색하고 requests를 사용하여 새로 설정된 user-agent가 인쇄됩니다.

import requests

url = "http://httpbin.org/user-agent"

headers = requests.utils.default_headers()
headers.update(
    {
        "User-Agent": "My User Agent 1.0",
    }
)

response = requests.get(url, headers=headers)
print(response)

data = response.json()
print(data["user-agent"])

출력:

C:\python38\python.exe "C:/Users/Win 10/main.py"
<Response [200]>
My User Agent 1.0

Process finished with exit code 0

요청 버전 2.13에 대해 Python에서 사용자 에이전트 요청 설정

최신 버전의 requests에서는 사전을 생성하여 헤더를 직접 업데이트할 수 있습니다. 이 예에서 프로그램은 user-agentfrom이라는 두 개의 헤더를 설정합니다.

둘 다 업데이트되는 유효한 HTTP 헤더입니다.

request.get()의 값은 마지막 프로그램과 유사하게 response 변수에 저장됩니다. HTTP 헤더 user-agent가 제대로 업데이트되었는지 확인하기 위해 default_user_agent() 함수가 사용됩니다. 이 함수는 URL에서 기본 user-agent 값을 가져옵니다.

previous-agent 변수 내에서 기본 user-agentrequests 기능을 사용하여 저장됩니다. previous_agent = requests.utils.default_user_agent() 구문을 사용하면 값이 인쇄됩니다.

우리가 보낸 헤더는 response.request.headers 함수에 의해 액세스되므로 새로 업데이트된 user-agent 헤더는 updated_agent = response.request.headers['user-agent'], 그런 다음 인쇄됩니다.

업데이트된 헤더를 포함하여 모든 헤더를 확인하기 위해 새 변수 all_headers가 생성됩니다. 다시 response.request.headers 기능을 사용하여 requests를 사용하여 헤더를 저장합니다.

import requests

url = "https://httpbin.org/get"

headers = {"User-Agent": "My User Agent 1.0", "From": "youremail@domain.example"}

response = requests.get(url, headers=headers)
print(response)

previous_agent = requests.utils.default_user_agent()
print("Default user-agent header = ", previous_agent)

updated_agent = response.request.headers["user-agent"]
print("Updated user-agent header = ", updated_agent)

all_headers = response.request.headers
print(all_headers)

출력:

C:\python38\python.exe "C:/Users/Win 10/main.py"
<Response [200]>
Default user-agent header =  python-requests/2.28.1
Updated user-agent header =  My User Agent 1.0
{'User-Agent': 'My User Agent 1.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'From': 'youremail@domain.example'}

Process finished with exit code 0

requests를 사용하여 user-agent를 설정하는 또 다른 방법은 브라우저처럼 요청을 보내는 것입니다. 아래 예에서 header 변수 내 user-agent 필드는 브라우저 데이터 유형으로 업데이트됩니다.

import requests

url = "http://httpbin.org/user-agent"
headers = {
    "User-Agent": 'user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
    "like Gecko) Chrome/105.0.0.0 Safari/537.36"
}

response = requests.get(url.strip(), headers=headers, timeout=10)

previous_agent = requests.utils.default_user_agent()
print("Default user-agent header = ", previous_agent)

updated_agent = response.request.headers["user-agent"]
print("Updated user-agent header = ", updated_agent)

출력:

C:\python38\python.exe "C:/Users/Win 10/main.py"
Default user-agent header =  python-requests/2.28.1
Updated user-agent header =  user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36

Process finished with exit code 0

requests를 사용하여 user-agent를 설정하는 또 다른 간단한 방법은 session 모듈을 사용하는 것입니다. 그러면 헤더를 반복적으로 설정할 필요가 없습니다.

객체 변수 sessionrequests.Session() 함수를 사용하여 URL 세션을 로드합니다. 이전 프로그램에서 사용한 get 요청과 유사합니다.

user-agent 헤더는 session.headers.update() 기능을 통해 업데이트됩니다.

그런 다음 session.get() 함수는 URL에서 헤더 정보를 로드합니다. 마지막으로 requests를 사용하여 user-agent 세트의 업데이트된 정보를 얻기 위해 session.headers['user-agent']) 구문이 인쇄됩니다.

import requests

session = requests.Session()
session.headers.update({"User-Agent": "Custom user agent"})

session.get("https://httpbin.org/headers")

print(session.headers["user-agent"])

프로그램이 requestssession을 사용하여 user-agent를 설정한 후 세션 내부에 로드된 업데이트된 헤더를 인쇄합니다.

출력:

C:\python38\python.exe "C:/Users/Win 10/main.py"
Custom user agent

Process finished with exit code 0

이 기사에서는 requests를 사용하여 user-agent를 설정하는 방법과 이를 얻는 방법에 대해 자세히 설명했습니다. 독자는 기사를 읽은 후 Python에서 requests를 사용하여 user-agent를 쉽게 설정할 수 있습니다.

관련 문장 - Python Requests