이 글은 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python List 슬라이싱의 기본 구문은 목록 [start : stop : step]입니다. 1. Start는 첫 번째 요소 인덱스, 2.Stop은 첫 번째 요소 인덱스가 제외되고 3. Step은 요소 사이의 단계 크기를 결정합니다. 슬라이스는 데이터를 추출하는 데 사용될뿐만 아니라 목록을 수정하고 반전시키는 데 사용됩니다.

ListSoutPerformArraysin : 1) DynamicsizingandFrequentInsertions/Deletions, 2) StoringHeterogeneousData 및 3) MemoryEfficiencyForsParsEdata, butMayHavesLightPerformanceCosceperationOperations.

TOCONVERTAPYTHONARRAYTOALIST, USETHELIST () CONSTUCTORORAGENERATERATOREXPRESSION.1) importTheArrayModuleAndCreateAnarray.2) USELIST (ARR) 또는 [XFORXINARR] TOCONVERTITTOALIST.

chooSearRaysOverListSinpyTonforBetTerferformanceAndMemoryEfficiencyInspecificscenarios.1) arrgenumericalDatasets : arraysreducememoryUsage.2) Performance-CriticalOperations : ArraysofferspeedboostsfortaskslikeApenorsearching.3) TypeSenforc

파이썬에서는 루프에 사용하여 열거 및 추적 목록에 대한 이해를 나열 할 수 있습니다. Java에서는 루프를 위해 전통적인 사용 및 루프가 트래버스 어레이를 향해 향상시킬 수 있습니다. 1. Python 목록 트래버스 방법에는 다음이 포함됩니다. 루프, 열거 및 목록 이해력. 2. Java 어레이 트래버스 방법에는 다음이 포함됩니다. 루프 용 전통 및 루프를위한 향상.

이 기사는 버전 3.10에 도입 된 Python의 새로운 "매치"진술에 대해 논의하며, 이는 다른 언어로 된 문장과 동등한 역할을합니다. 코드 가독성을 향상시키고 기존 IF-ELIF-EL보다 성능 이점을 제공합니다.

Python 3.11의 예외 그룹은 여러 예외를 동시에 처리하여 동시 시나리오 및 복잡한 작업에서 오류 관리를 향상시킵니다.

Python의 기능 주석은 유형 확인, 문서 및 IDE 지원에 대한 기능에 메타 데이터를 추가합니다. 코드 가독성, 유지 보수를 향상 시키며 API 개발, 데이터 과학 및 라이브러리 생성에 중요합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

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

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

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
