/*
时间:2018/09/22
功能:session
目录:
一: session
1 概念
2 禅道登录 : 用户名 + 密码
3 session原理
4 博客园登录 : cookie
二: token
1 概念
2 博客园登录 : cookie
*/
一: session
1 概念
/*Cookie: 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。服务端session: 服务端保存的一个数据结构, 用来跟踪用户的状态,这个数据可以保存在文件、数据库。
python session: 无界面, 微型浏览器。
*/
2 禅道登录 : 用户名 + 密码
# coding:utf-8
import requests
# 禅道登录
s = requests.session() # python微型浏览器
strUrlZentao = "http://127.0.0.1/zentao/user-login.htm"
body = {
"account": "admin", "password": "123456", "keepLogin[]": "on", "referer": "/zentao/my.html" } r = s.post(strUrlZentao, data = body) print(r.status_code) a = r.content.decode("utf-8") print(a) # 访问请求 - 登录之后 strUrlMy = "http://127.0.0.1/zentao/my/" # url - 我的地盘 r = s.get(strUrlMy) print(r.content.decode("utf-8"))
1 : 使用session发送请求。
1 : 登录后的操作,不要需要输入cookie,session自己设置cookie。
3 session原理
1 : 访问禅道,登录前没有cookie信息。
1 : 登录后有cookie信息。
# coding:utf-8
import requests
# 禅道登录
strUrlZentao = "http://127.0.0.1/zentao/user-login.htm"
body = {
"account": "admin",
"password": "123456", "keepLogin[]": "on", "referer": "/zentao/my.html" } s = requests.session() # python微型浏览器 print(s.cookies) r = s.post(strUrlZentao, data = body) print(s.cookies)
1 : 查看登录前后cookie。
1 : 显示出,session登录前cookie后登录后的cookiee。
4 博客园登录 : cookie
1 : 登录博客园,登录时勾选(下次自动登录/保存登录/自动登录)之类的,延长cookie时长。
2 : 访问: https://i.cnblogs.com/EditPosts.aspx?opt=1
1 : 使用fiddler,查看cookie。
# coding:utf-8
import requests
import urllib3
urllib3.disable_warnings() # 忽略警告
s = requests.session() # python微型浏览器
print(s.cookies)
# 添加cookies
c = requests.cookies.RequestsCookieJar() # cookie的jar包
c.set(".CNBlogsCookie" , "29B48ADA5898E1E0E8667C6071799BA17BA3463918C53E51B4248340C6D14C35FEE26B58F48E76D08E5B8D62135D2B0A2FF3AAA6B84698FBAFD6CFA7FEEF31B4CCC192DB11E1D430055BDB3E4BBFE3B7651CB2D77") c.set(".Cnblogs.AspNetCore.Cookies" , "CfDJ8J0rgDI0eRtJkfTEZKR_e83xU6tHXuCcOrnTqapnuA_jH39U-KHnyGYe5ZDMHIGFEtcARkK8YgvNMo5Kp0YJ-i6F9P1nFS0HMvcgHwc3NEpRoa3HtmdFUbJpb-w8i-4OoSmIJpSB8cqE6tvfPkiiTYKjRwW6QXrqmpzsgue-kl1yR9S3iyQF0gl9MAj_fG3PJiLVLeyrpsDVU_sXWlusfFuOV2TexDtJG5IvddTjo3YTR_r2b8ukD91obe5aqd_jyl49ptLDJsqfDZMC4QPVYZpYDuLWnPPGzru24Dpw9T5jKnt8u9j1K8fJ5bRc-iJTGw; __gads=ID=b62d6c61956e6a5d:T=1537551446:S=ALNI_MYVo1OG7TaaRZDeGmjAjyifjPg6VA; _ga=GA1.2.1683585037.1537551473; _gid=GA1.2.1823315871.1537551473; SERVERID=04ead23841720026ba009cb4f597ec8c|1537551610|1537551568") # 更新cookies s.cookies.update(c) print(s.cookies) # session请求 url = "https://i.cnblogs.com/EditPosts.aspx?opt=1" # 博客园后台 - 新随笔 r = s.get(url, verify = False) print(r.text)
1 : 使用cookie,访问刚才网址。
1 : 验证 - 可以使用cookie访问成功。
2 : 其他方法 - 使用selenium打开浏览器,读取缓存,访问该网址的cookies。
二: token
1 概念
/*
概念:
1 app多用于token用校验,网站多用于cookies。
2 get请求登录前后无区别,post请求会带上token。
判断请求带cookie还是token
1 请求完全没有cookies信息。
2 服务器返回数据中带有token信息。
token位置: 返回数据url、head、body、cookies
*/
2 博客园登录 : cookie
1 : 访问url: https://passport.lagou.com/login/login.html
2 : 观察请求数据,红框内。
1 : 再访问url: https://passport.lagou.com/login/login.html
2 : 观察请求数据,红框内。
3 : 多次实验结论,请求登录拉勾网,除了用户名和密码之外,还要提交两个随机值(X_Anti_Forge_Token和X_Anti_Forge_Code)。
1 : 找到第一次出现两个随机值的地方,是在登录页面。
# coding:utf-8
import requests
import urllib3
urllib3.disable_warnings() # 忽略警告
# python微型浏览器
s = requests.session()
# 登录拉勾网
url = "https://passport.lagou.com/login/login.html" head = { "Host" : "passport.lagou.com", "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" } r = s.get(url, headers = head, verify = False) print(r.text)
正则表达式
BeautifulSoup https://www.cnblogs.com/yoyoketang/p/9098096.html