005 python接口 session
/* 时间: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