Python 요청에서 쿠키 사용
이 튜토리얼은 Python에서 cookies 매개변수의 도움으로 쿠키를 얻기 위해 requests.get()을 사용하는 방법과 로그인이 필요한 특정 웹 페이지에 액세스하는 방법을 보여줍니다.
또한 requests.Session()을 사용하여 해당 페이지와 연결된 상태를 유지하는 방법도 배웁니다.
requests.get()을 사용하여 Python에서 쿠키 가져오기
requests 라이브러리를 사용하면 서버에서 HTTP 쿠키를 만들고 읽을 수 있습니다. MDN 문서에 따르면 쿠키는 “서버가 사용자의 웹 브라우저에 보내는 작은 데이터 조각"입니다.
쿠키를 브라우저에 저장하고 서버로 다시 보낼 수 있습니다. 쿠키는 일반적으로 다음 목적 중 하나를 제공합니다.
- 로그인을 위한 세션 관리
- 쇼핑 카트
- 사용자 개인화 또는 사용자 행동 추적
이 섹션에서는 쿠키를 사용하는 방법을 설명하고 다음 섹션에서는 첫 번째 목적(로그인을 위한 세션 관리)을 사용합니다.
requests 라이브러리를 사용하여 쿠키를 보내고 받으려면 requests를 가져오는 것으로 시작합니다. 가져오기 후에 URL이라는 변수를 설정하여 링크를 문자열로 전달합니다.
이 URL은 우리가 서버로 보낸 쿠키 정보를 볼 수 있는 간단한 응답 본문을 제공하기 때문에 사용합니다. 예를 들어 사용자의 위치에 따라 사용자 경험을 맞춤화하고 싶다고 가정해 보겠습니다.
이렇게 하면 사용자가 주소를 입력하지 않고도 제품에 대한 배송 견적을 제공할 수 있습니다. 이를 위해 당사는 쿠키에 있는 사용자의 위치를 알도록 요청하고 동의하는 경우 해당 정보를 쿠키에 저장합니다.
이 이벤트에서 받은 콘텐츠를 모방하기 위해 location 키와 New York 값을 사용하여 CK라는 사전을 선언합니다.
다음으로 응답 개체 response를 선언하고 requests.get() 메서드를 사용하여 설정합니다. 첫 번째 매개변수로 URL 변수를 입력하고 CK 사전과 동일하게 설정될 cookies 키워드를 입력합니다.
이제 요청이 설정되었으므로 response.text를 사용하여 응답 객체의 텍스트를 인쇄할 수 있습니다. 스크립트가 실행되면 방금 보낸 쿠키가 응답 본문 내에 있음을 알 수 있습니다.
import requests
URL = "https://httpbin.org/cookies"
CK = {"location": "New York"}
response = requests.get(URL, cookies=CK)
print(response.text)
출력:
{
"cookies": {
"location": "New York"
}
}
서버에서 쿠키를 수신하기 위해 Google 웹사이트에 이미 설정된 쿠키를 사용합니다.
Session() 클래스를 사용하여 로그인 후 페이지 연결 유지
브라우저의 검사 요소 도구를 사용하여 로그인 요청이 전송된 위치를 확인하고 프로그램에서 이를 모방할 수 있습니다. 그리고 세션 부분을 사용하면 로그인 뒤에 있는 모든 페이지에 계속 액세스할 수 있습니다.
코드를 작성하기 전에 몇 가지 작업을 수행해야 합니다. 그러나 URL 로그인을 찾고 해당 post 요청과 함께 전송되는 매개변수를 확인해야 합니다.
로그인 자격 증명이 필요하므로 더미 사이트를 사용하고 있기 때문에 이 예에서는 로그인 정보를 공유할 것입니다.
사용자 이름과 비밀번호가 필요한 간단한 로그인 양식이 있습니다. 주어진 정보를 사용하여 로그인하면 로그인되고 보안 영역이 확보됩니다.
검사 요소를 사용하고 네트워크 탭으로 이동하여 요청 및 응답을 볼 수 있습니다. 여기에서 로그인 버튼을 클릭하면 여러 요청이 팝업되는 것을 볼 수 있습니다.
페이지에 로그인하기 전에 네트워크 탭에서 모든 것을 볼 수 있도록 보존 로그를 확인해야 합니다. 인증 요청을 연 후 몇 가지 정보를 얻을 수 있으며 그 중 하나는 게시 요청입니다.
post 요청은 웹 브라우저에서 서버로 보내는 요청이고 get 요청은 게시되고 있는 URL을 찾기 위해 돌아오는 정보입니다.
Python 스크립트에서 post 요청을 보낼 것이기 때문에 post 요청 URL을 복사합니다. 페이로드에서 양식 데이터를 찾을 수 있습니다.
때로는 payload 내에서 더 많은 정보를 찾을 수 있으므로 모든 매개변수가 post 요청과 함께 이동하는지 확인해야 합니다.
그러나 우리의 경우 사용자 이름과 비밀번호만 있는 것을 볼 수 있습니다. 따라서 로그인 후 보안 페이지로 다시 이동했으며 이것이 get 요청입니다. secure 응답을 사용하여 Python 스크립트에서 사용할 URL 요청을 복사합니다.

이제 코드 편집기로 이동하여 코드 작성을 시작합니다. 항상 그렇듯이 가장 먼저 해야 할 일은 요청 가져오기이며 게시 요청에 대한 로그인 URL을 설정하고 get 요청에 대한 URL.
이제 post() 메서드를 호출하여 username 및 password를 전송하고 서버에서 인증을 받아야 합니다. 이를 위해서는 ACCESS_DATA라는 사전을 사용하여 일부 payload를 보내야 합니다.
우리는 Login_Dummy_web() 내부의 코드를 래핑하고 data.py라는 또 다른 파이썬 파일을 생성했습니다.
data 파일을 가져온 후 함수를 호출하고 보안 페이지의 RESULT.text를 반환하는 동안 이 파일에서 username 및 password에 액세스했습니다.
get() 메서드를 사용하여 보안 페이지로 돌아가도록 합시다. 인증되지 않았기 때문에 로그인 페이지로 다시 보내드립니다.
import requests
import data
def Login_Dummy_web(username, password):
LOGIN_URL = "https://the-internet.herokuapp.com/authenticate"
SECURE_URL = "https://the-internet.herokuapp.com/secure"
ACCESS_DATA = {"username": username, "password": password}
RESULT = requests.post(LOGIN_URL, data=ACCESS_DATA)
RESULT2 = requests.get(SECURE_URL)
return RESULT2.text
print(Login_Dummy_web(data.username, data.password))
출력:

우리는 이미 post() 메서드를 사용하여 로그인했지만 여전히 세션이 없기 때문에 보안 페이지를 보내는 데 사용을 거부합니다. 세션을 통해 특정 웹사이트에 대한 쿠키를 유지할 수 있습니다. 보안 페이지를 얻으려면 requests.Session()을 사용해야 합니다.
with 키워드를 사용하여 컨텍스트 관리자를 사용합니다. 컨텍스트 관리자는 연결 상태를 유지하고 남아 있는 동안 로그인 상태를 유지할 수 있기 때문에 편리합니다.
이제 ss라는 세션 변수에서 get() 및 post() 메소드를 호출해야 합니다. 이제 Session() 클래스에서 액세스하고 있기 때문입니다.
import requests
import data
def Login_Dummy_web(username, password):
LOGIN_URL = "https://the-internet.herokuapp.com/authenticate"
SECURE_URL = "https://the-internet.herokuapp.com/secure"
ACCESS_DATA = {"username": username, "password": password}
with requests.Session() as ss:
ss.post(LOGIN_URL, data=ACCESS_DATA)
RESULT = ss.get(SECURE_URL)
return RESULT.text
print(Login_Dummy_web(data.username, data.password))
이제 (보안 영역에 오신 것을 환영합니다)라고 표시되며 이는 우리가 거기에 로그인했음을 증명합니다. ss라는 requests.Session() 변수를 사용하여 다른 URL 콘텐츠를 가져올 수 있습니다.

data.py 파일의 코드는 다음과 같습니다.
username = "tomsmith"
password = "SuperSecretPassword!"
자세한 내용은 이 웹 사이트를 방문하십시오.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn