Python利用requests.Session对象模拟浏览器登录cnblogs

request.Session对行可以跨请求的保持cookie,非常方便的用于模拟登录。

cnblogs登录页面分析:

登录页面https://passport.cnblogs.com/user/signin

使用抓包工具fiddler(wireshark无法抓取)可以抓取到登录时post的数据:

共三个字段,分别是input1、input2和remember(用户名、密码、是否记住登录信息)。

其中,input1和input2是经过RSA加密后的密文。

为记住登录状态,我们还需要抓取cookie (注意,要抓取主页的cookie):

抓到以上必须数据后,就可以模拟浏览器来登录cnblogs,具体代码实现如下:

#!/usr/bin/python
# _*_ coding:utf-8 _*_
import requests s=requests.Session() headers={
'Accept':'application/json, text/javascript, */*; q=0.01',
'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
'Referer':'https://passport.cnblogs.com/user/signin',
'Cookie':'.CNBlogsCookie=B1CB9D692BDF8CE3E5E16C879498AB7E4624CAxxxxxxxxxx4C494C503E65A81B35BBD5C05991503E855C0B917DF1FA1B6C2855821AAE66F474C555653FD8812C6BEA6235FC15E6E6963ABF3716F8B3D8D4B840;_ga=GA1.2.372503701.1486351394'
} log_data={
'input1':'n8utCFvFkeDcjTR2uXy2XtwwVFJX/xxxxxxxxxxw1GrGY1W13otnJGsb6ojcd0N9MHMzbNlp6/jXMryq5wVUk/UOW98X1ZDmtb4k3UmLelQ9ugiHcKdxVherIFLVvXOfCAPsmUDZt5ir09k4svPtrMo6MDHlkEk4qSDDl3EJfnjU=',
'input2':'B5DjZEwPm2i06iCgiAJe8SU4YlrvrxxxxxxxxIM4ZqCf+WXhjW3Zw9eMfKiZS0ZalnTNGG441vjiIGzzDX/mzmWpMrP9j2ydIqd7bUwLsIyc2ZV4S4THjZp5vgqqxRLbF+kfOGUsQ2VJl1UmFc2S1FSd8i3wdZUol23t0a30=',
'remember':'false'
} url ='https://passport.cnblogs.com/user/signin'
req=s.post(url,data=log_data,headers=headers)
print req.status_code
print req.content.decode('utf-8') f=s.get('http://www.cnblogs.com/ahaii/diary/2016/01/28/5167172.html',headers=headers)#查看某一篇日记
print f.status_code
print f.text

补充:

1、关于https加密:

https即http+ssl加密传输方式,使用443端口,对传输的数据进行加密。

对称加密与非对称加密:

对称加密:数据发送和接收端使用同一私钥,较不安全。

加密:明文+算法+私钥=>密文  解密:密文+算法+私钥=>明文

非对称加密:数据发送和接收端使用一对密钥(公钥和私钥)对数据加密,二者成对出现。公钥对外公开,私钥保存。

被公钥加密的密文只能使用私钥解密:

加密:明文+算法+公钥=>密文  解密:密文+算法+私钥=>明文

被私钥加密的密文只能使用公钥解密:

加密:明文+算法+私钥=>密文  解密:密文+算法+公钥=>明文

2、关于https连接建立过程:

整个过程中会涉及到三个密钥

  • 服务器端的公钥与私钥,用来进行非对称加密
  • 客户端生成的随机密钥,用来对数据进行对称加密
  1. 客户端发起https请求,用户输入一个https网址以后,访问服务器的443端口
  2. 服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
  3. 传送证书,也就是公钥,服务端将公钥传给客户端。
  4. 客户端解析证书,客户端收到服务器发过来的公钥以后先要对其有效性进行校验,如果公钥有问题则无法进行https传输,这个公钥也就是服务器发过来的数字证书。如果没有问题,则会生成一个随机值,这个随机值就是对于对称加密的密钥。然后用服务端发过来的公钥对这个随机值(也就是客户端私钥)进行非对称加密,至此,HTTPS中的第一次HTTP请求结束。
  5. 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
  6. 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
  7. 然后服务器将加密后的密文发送给客户端。
  8. 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

Python模拟登录cnblogs的更多相关文章

  1. [Python] Python 模拟登录,并请求

    Python 模拟登录,并请求 # encoding: utf- import requests import socket import time socket.setdefaulttimeout( ...

  2. 【Python数据分析】Python模拟登录(一) requests.Session应用

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  3. 【py登陆】python模拟登录

    用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...

  4. 忘记秘密利用python模拟登录暴力破解秘密

    忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...

  5. [Python] 模拟登录网站(。。为了之后操作数据。。)

    我司的内部管理(Web)系统(日报)着实..(mafan).. 所以,就想自己动手增加一下便利性. 计划是, - 桌面程序 用来方便记录(按自己格式,数据随时保存到sqlite中,备用) 通过一览来确 ...

  6. Python模拟登录实战(三)

    目标:模拟登录知乎 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan' import re impor ...

  7. Python模拟登录实战(二)

    目标:1.模拟登录豆瓣,2.自动更改签名和发表说说. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan ...

  8. Python模拟登录实战(一)

    今天,学习了模拟登录新浪微博.模拟登录主要有两种方式,一.利用Cookie:二.模仿浏览器的请求,发送表单. 法一: Cookie:指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密 ...

  9. Python模拟登录的几种方法

    目录 方法一:直接使用已知的cookie访问 方法二:模拟登录后再携带得到的cookie访问 方法三:模拟登录后用session保持登录状态 方法四:使用无头浏览器访问 正文 方法一:直接使用已知的c ...

随机推荐

  1. Thunder-Beta发布-事后诸葛亮会议-2017秋-软件工程第十一次作业

    小组名称:Thunder项目名称:爱阅APP小组成员:王航 李传康 翟宇豪 邹双黛 苗威 宋雨 胡佑蓉 杨梓瑞一.设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有 ...

  2. 奔跑吧DKY——团队Scrum冲刺阶段-Day 4

    今日完成任务 谭鑫:主要解决之前存在的控件不灵敏问题,导致界面跳转不顺利. 黄宇塘:制作新的游戏背景图,对主界面图进行调整. 赵晓海:主要解决之前存在的控件不灵敏问题,导致界面跳转不顺利. 方艺雯:制 ...

  3. 关于react虚拟DOM的研究

    1.传统的前端是这样的,我在学校也都是这样做的,html(jsp)主要负责提供所有的DOM节点,而javascript负责动态效果,比如按钮点击,图片轮播等,这样的话javascript如何组织结构是 ...

  4. “吃神么,买神么”的第一个Sprint计划(第五天)

    “吃神么,买神么”项目Sprint计划 ——5.25  星期一(第五天)立会内容与进度 摘要:logo2出来了,修改过不一样的风格,组内总体评价可以,但是颜色要改,色调没注意,统一决定改成与背景色一致 ...

  5. 使用java开发微信公众平台(1)

    目录 开发服务器 域名验证 获取access_token 自定义菜单 个人账号不能定义url访问服务器,使用测试号就不用认证添加url了,进入公众平台测试账号 开发服务器 域名验证 进入公众平台测试账 ...

  6. SpringMVC中Controller的返回值类型

    Controller方法的返回值可以有以下几种: 1.返回ModelAndView 返回ModelAndView时最常见的一种返回结果.需要在方法结束的时候定义一个ModelAndView对象,并对M ...

  7. MongoDB安装笔记

    2017年11月17日,在Windows Service 2008R2上成功安装MongoDB. 版本:mongodb-win32-x86_64-2008plus-ssl-3.4.6-signed.m ...

  8. Beta阶段敏捷冲刺③

    1.提供当天站立式会议照片一张. 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 1.1昨天已完成的工作. 姓名 昨天已完成的工作 徐璐琳 完善设置界面的功能 祁泽文 研 ...

  9. Delphi判断字符串中是否包含汉字,并返回汉字位置

    //1,函数代码{判断字符串是否包含汉字// judgeStr:要判断的字符串//posInt:第一个汉字位置}function TForm2.IsHaveChinese(judgeStr: stri ...

  10. 远程修改VMware ESXi服务器的密码(SSH)

    1,用vSphere client登录到服务器,将SSH启用. 2,使用ssh连接工具(我用的是secureCRT)远程登录,输入passwd,键入两次新密码,OK.