[Python]

您所在的位置:网站首页 怎样登陆网站网址 [Python]

[Python]

2023-11-12 06:02| 来源: 网络整理| 查看: 265

文章目录 登录说明session操作data序列化 示例代码登录流程验证

在《使用Requests进行HTTP请求与文件上传下载》中介绍了requests库的常用方法,本章介绍如何使用request进行用户登录。

登录说明

一般页面登录都是使用Form实现的,以登录如下页面为例:

Spring Security Example Invalid username and password. You have been logged out. User Name : Password: session操作

一般页面登录后,都需要返回session(保存在cookies中)用于后续的验证,可通过LWPCookieJar方便地进行cookies的保存与加载。为例方便cookies操作,使用requests.session(),代替requests进行请求操作。

默认情况下,LWPCookieJar保存与加载时,会忽略掉discard与expired的项,为能正常的保存与加载,需要使用参数ignore_discard=True, ignore_expires=True。

data序列化

请求参数中data会根据类型不同进行不同方式的序列化,在models.py的prepare_body中有对data的详细实现。

对于字典格式的data,会序列化为k1=v1&k2=v2格式,并在未设定content_type情况下,设定为application/x-www-form-urlencoded。

示例代码 登录流程

在登录成功后,保存session到文件中,以便后续使用:

import requests import requests.utils import http.cookiejar as cookiejar session = 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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3