Python의 Requests 패키지를 사용하여 시뮬레이션된 로그인을 구현하는 방법
이 글은 주로 Python의 Requests 패키지를 사용하여 로그인을 시뮬레이션하는 방법을 자세히 소개합니다. 여기에는 특정 참조 값이 있습니다. 관심 있는 친구가 참조할 수 있습니다.
얼마 전에는 Python을 사용하여 일부 페이지를 가져와서 플레이하는 것을 좋아했습니다. 기본적으로 그들은 모두 get을 사용하여 일부 페이지를 요청한 다음 일반 규칙을 통해 필터링합니다.
오늘 시도해 보고 개인 웹사이트에 로그인하는 것을 시뮬레이션했습니다. 발견도 비교적 간단합니다. 이 기사를 읽으려면 http 프로토콜과 http 세션에 대한 어느 정도 이해가 필요합니다.
참고: 시뮬레이션된 로그인은 내 개인 웹사이트이므로 다음 코드는 개인 웹사이트와 계정 비밀번호를 처리합니다.
웹사이트 분석
크롤러에게 필수적인 첫 번째 단계는 대상 웹사이트를 분석하는 것입니다. 여기서는 분석을 위해 Google Chrome의 개발자 도구를 사용합니다.
로그인을 통해 크롤링하다가 그런 요청을 봤습니다.
상단 부분은 요청 헤더이고, 하단 부분은 요청에 의해 전달된 매개변수입니다. 그림에서 볼 수 있듯이 페이지는 양식을 통해 세 가지 매개변수를 제출합니다. 각각 _csrf, usermane, 비밀번호입니다.
csrf는 도메인 간 스크립트 위조를 방지하기 위한 것입니다. 원칙은 매우 간단합니다. 즉, 모든 요청에 대해 서버는 암호화된 문자열을 생성합니다. 숨겨진 입력 양식에 배치하십시오. 다른 요청을 할 때 이 문자열을 함께 전달하여 동일한 사용자의 요청인지 확인하세요.
그래서 우리의 코드 로직이 거기에 있습니다. 로그인 페이지를 요청하여 시작하세요. 그런 다음 페이지를 분석하고 csrf 문자열을 가져옵니다. 마지막으로 이 문자열과 계정 비밀번호가 로그인을 위해 서버로 전달됩니다.
첫 번째 코드
#!/usr/bin/env python2.7 # -*- coding: utf-8 -*- import requests import re # 头部信息 headers = { 'Host':"localhost", 'Accept-Language':"zh-CN,zh;q=0.8", 'Accept-Encoding':"gzip, deflate", 'Content-Type':"application/x-www-form-urlencoded", 'Connection':"keep-alive", 'Referer':"http://localhost/login", 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" } # 登陆方法 def login(url,csrf): data = { "_csrf" : csrf, "username": "xiedj", "password": "***" } response = requests.post(url, data=data, headers=headers) return response.content # 第一次访问获取csrf值 def get_login_web(url): page = requests.get('http://localhost/login') reg = r'<meta name="csrf-token" content="(.+)">' csrf = re.findall(reg,page.content)[0] login_page = login(url,csrf) print login_page if __name__ == "__main__": url = "http://localhost/login/checklogin" get_login_web(url)
코드에는 문제가 없는 것 같습니다. 그런데 실행 중 오류가 발생했습니다. 확인 결과 오류 원인은 csrf 검증에 실패했기 때문입니다!
얻은 csrf와 로그인을 요청한 csrf 문자열이 정상임을 여러 번 확인한 후 문제가 생각났습니다.
오류의 원인을 여전히 알 수 없다면 여기서 잠시 멈춰서 문제에 대해 생각해 보세요. "csrf를 얻기 위한 첫 번째 요청과 두 번째 로그인 후 요청이 동일한 사용자로부터 온 것인지 서버는 어떻게 알 수 있습니까?"
이 시점에서 성공적으로 로그인하려면 어떻게 해야 하는지 해결해야 합니다. 서비스가 두 요청이 동일한 사용자로부터 온 것으로 믿도록 합니다. 여기에서 http 세션을 사용해야 합니다(잘 모르겠으면 Baidu를 직접 사용할 수 있습니다. 여기에 간략한 소개가 있습니다).
http 프로토콜은 상태 비저장 프로토콜입니다. 이것을 Stateless로 만들기 위해 세션이 도입되었습니다. 간단히 말하면 세션을 통해 이 상태를 기록해 두는 것입니다. 사용자가 처음으로 웹 서비스를 요청하면 서버는 사용자의 정보를 저장하기 위해 세션을 생성합니다. 동시에 사용자에게 돌아올 때 세션 ID가 쿠키에 저장됩니다. 사용자가 다시 요청하면 브라우저는 이 쿠키를 함께 가져옵니다. 따라서 서버는 동일한 사용자에 대한 여러 요청이 있는지 여부를 알 수 있습니다.
그래서 우리 코드는 첫 번째 요청을 할 때 이 sessionID를 얻어야 합니다. 이 sessionID를 두 번째 요청과 함께 전달하세요. 요청의 가장 큰 장점은 간단한 request.Session()과 함께 이 세션 개체를 사용할 수 있다는 것입니다.
두 번째 코드
#!/usr/bin/env python2.7 # -*- coding: utf-8 -*- import requests import re # 头部信息 headers = { 'Host':"localhost", 'Accept-Language':"zh-CN,zh;q=0.8", 'Accept-Encoding':"gzip, deflate", 'Content-Type':"application/x-www-form-urlencoded", 'Connection':"keep-alive", 'Referer':"http://localhost/login", 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" } # 登陆方法 def login(url,csrf,r_session): data = { "_csrf" : csrf, "username": "xiedj", "password": "***" } response = r_session.post(url, data=data, headers=headers) return response.content # 第一次访问获取csrf值 def get_login_web(url): r_session = requests.Session() page = r_session.get('http://localhost/login') reg = r'<meta name="csrf-token" content="(.+)">' csrf = re.findall(reg,page.content)[0] login_page = login(url,csrf,r_session) print login_page if __name__ == "__main__": url = "http://localhost/login/checklogin" get_login_web(url)
로그인 후 페이지를 성공적으로 가져왔습니다
requests.Session()이 세션 개체를 시작한 후 두 번째 요청이 자동으로 이전 세션 ID를 함께 전달하세요.
관련 권장 사항:
Python을 사용하여 Excel 차트를 내보내고 그림으로 내보내는 방법
Python의 개방형 함수 사용 시 No Such File 또는 DIr 오류의 원인 분석
위 내용은 Python의 Requests 패키지를 사용하여 시뮬레이션된 로그인을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Sublime 텍스트로 Python 코드를 실행하려면 먼저 Python 플러그인을 설치 한 다음 .py 파일을 작성하고 코드를 작성한 다음 CTRL B를 눌러 코드를 실행하면 콘솔에 출력이 표시됩니다.

Visual Studio Code (VSCODE)에서 코드를 작성하는 것은 간단하고 사용하기 쉽습니다. vscode를 설치하고, 프로젝트를 만들고, 언어를 선택하고, 파일을 만들고, 코드를 작성하고, 저장하고 실행합니다. VSCODE의 장점에는 크로스 플랫폼, 무료 및 오픈 소스, 강력한 기능, 풍부한 확장 및 경량 및 빠른가 포함됩니다.

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

메모장에서 Python 코드를 실행하려면 Python 실행 파일 및 NPPEXEC 플러그인을 설치해야합니다. Python을 설치하고 경로를 추가 한 후 nppexec 플러그인의 명령 "Python"및 매개 변수 "{current_directory} {file_name}"을 구성하여 Notepad의 단축키 "F6"을 통해 Python 코드를 실행하십시오.
