本文共 2125 字,大约阅读时间需要 7 分钟。
在《》中介绍了requests库的常用方法,本章介绍如何使用request进行用户登录。
一般页面登录都是使用Form实现的,以登录如下页面为例:
Spring Security Example Invalid username and password.You have been logged out.
一般页面登录后,都需要返回session(保存在cookies中)用于后续的验证,可通过LWPCookieJar方便地进行cookies的保存与加载。为例方便cookies操作,使用requests.session(),代替requests进行请求操作。
默认情况下,LWPCookieJar保存与加载时,会忽略掉discard与expired的项,为能正常的保存与加载,需要使用参数ignore_discard=True, ignore_expires=True
。
请求参数中data会根据类型不同进行不同方式的序列化,在models.py的prepare_body中有对data的详细实现。
对于字典格式的data,会序列化为k1=v1&k2=v2
格式,并在未设定content_type情况下,设定为application/x-www-form-urlencoded
。
在登录成功后,保存session到文件中,以便后续使用:
import requestsimport requests.utilsimport http.cookiejar as cookiejarsession = requests.session()session.cookies = cookiejar.LWPCookieJar(filename='./security.cookie')BaseUrl = 'http://127.0.0.1:7087/study/'header = { 'Referer': BaseUrl + "login", 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/89.0.4389.82'}def login(user, psw): try: data = { 'username': user, 'password': psw, } resp = session.post(url=BaseUrl + 'login', headers=header, data=data) print(resp) if resp.status_code == requests.codes.ok: print('redirect url:', resp.url) cookie = requests.utils.dict_from_cookiejar(session.cookies) print(cookie) session.cookies.save(ignore_discard=True, ignore_expires=True) # if canRedirect(BaseUrl): # print("Login success") except Exception as ex: print(ex)
登录成功即使返回ok,也不一定是真的成果;最准确的方式是尝试登录一个需要验证的页面,若返回成功,则是真正的成功:
def canRedirect(url): try: # session.cookies.load(ignore_discard=True, ignore_expires=True) resp = session.get(url, headers=header) print(resp) return resp.status_code == requests.codes.ok except Exception as ex: print(ex) return False
转载地址:http://fzilf.baihongyu.com/