前言
上一篇模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等,这时候如何保持会话呢?
(由于博客园最近登录机制变了,登录全部走cookie登录)
一、session简介
1.查看帮助文档,贴了一部分,后面省略了
>>import requests
>>help(requests.session())class Session(SessionRedirectMixin)
| A Requests session. | | Provides cookie persistence, connection-pooling, and configuration. | | Basic Usage:: | | >>> import requests | >>> s = requests.Session() | >>> s.get('http://httpbin.org/get') | <Response [200]> | | Or as a context manager:: | | >>> with requests.Session() as s: | >>> s.get('http://httpbin.org/get') | <Response [200]>
二、使用session登录
1.使用session登录只需在上一篇基础上稍做修改
# coding:utf-8
import requestsurl = "https://passport.cnblogs.com/user/signin"headers = { 头部信息已省略}
payload = {"input1":"xxx", "input2":"xxx", "remember":True}# r = requests.post(url, json=payload, headers=headers,verify=False)
# 修改后如下
s = requests.session()r = s.post(url, json=payload, headers=headers,verify=False)print r.json()三、保存编辑
1.先打开我的随笔,手动输入内容后,打开fiddler抓包
2.把body的参数内容写成字典格式,有几个空的参数不是必填的,可以去掉
body = {"__VIEWSTATE": "",
"__VIEWSTATEGENERATOR":"FE27D343", "Editor$Edit$txbTitle":"这是我的标题:上海-悠悠", "Editor$Edit$EditorBody":"<p>这里是中文内容:http://www.cnblogs.com/yoyoketang/</p>", "Editor$Edit$Advanced$ckbPublished":"on", "Editor$Edit$Advanced$chkDisplayHomePage":"on", "Editor$Edit$Advanced$chkComments":"on", "Editor$Edit$Advanced$chkMainSyndication":"on", "Editor$Edit$lkbDraft":"存为草稿", }3.用上面的session继续发送post请求
4.执行后,查看我的草稿箱就多了一条新增的了
四、参考代码
# coding:utf-8
import requests# 先打开登录首页,获取部分cookieurl = "https://passport.cnblogs.com/user/signin"headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0" } s = requests.session()r = s.get(url, headers=headers,verify=False)print s.cookies# 添加登录需要的两个cookiec = requests.cookies.RequestsCookieJar()c.set('.CNBlogsCookie', '这里是抓到的') # 填上面抓包内容c.set('.Cnblogs.AspNetCore.Cookies','这里是抓到的') # 填上面抓包内容c.set('AlwaysCreateItemsAsActive',"True")c.set('AdminCookieAlwaysExpandAdvanced',"True")s.cookies.update(c)print s.cookies# 登录成功后保存编辑内容r1 = s.get("https://i.cnblogs.com/EditPosts.aspx?opt=1", headers=headers, verify=False)# 保存草稿箱url2= "https://i.cnblogs.com/EditPosts.aspx?opt=1"body = {"__VIEWSTATE": "", "__VIEWSTATEGENERATOR":"FE27D343", "Editor$Edit$txbTitle":"这是3111", "Editor$Edit$EditorBody":"<p>这里111:http://www.cnblogs.com/yoyoketang/</p>", "Editor$Edit$Advanced$ckbPublished":"on", "Editor$Edit$Advanced$chkDisplayHomePage":"on", "Editor$Edit$Advanced$chkComments":"on", "Editor$Edit$Advanced$chkMainSyndication":"on", "Editor$Edit$Advanced$txbEntryName":"", "Editor$Edit$Advanced$txbExcerpt":"", "Editor$Edit$Advanced$tbEnryPassword":"", "Editor$Edit$lkbDraft":"存为草稿", }r2 = s.post(url2, data=body, verify=False)print r.content