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