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

 

posted @ 2018-09-18 12:00  火焰马  阅读(717)  评论(0编辑  收藏  举报