python登陆川农教务网之代码简化

之前写了篇模拟登陆川农的文章,后来发现代码可以大大减少:

先上代码:

import requests
import re
def log_scau(id,pwd):
    #本代码共分为2部分
    session=requests.Session()
    index = session.get('http://jiaowu.sicau.edu.cn/web/web/web/index.asp')
    #第一部分,准备post提交的数据,登陆密码需要加密,所以先获取加密算法,算法就在html文档中
    data=index.text
    pattern = re.compile(r"dcode2=\d{10}")            # 正则匹配
    match = pattern.search(data)
    tmp = match.group(0)
    # 加密算法
    dcode = pwd
    dcode1 = ""
    temp = int(tmp.split("=")[1])
    dcode2 = "" + str(temp * 137)
    length = len(dcode)
    for i in range(1, length + 1):
        tmpstr = dcode[i - 1:i]
        dcode1 = dcode1 + chr(ord(tmpstr[0]) - i - int(dcode2[i - 1:i])) #加密后的数据

    data={                                          #需要提交的数据
        'user': id,
        'pwd': dcode1,
        'lb': 'S',
        'submit': ''
    }

    #第二部分,尝试登陆
    post_url='http://jiaowu.sicau.edu.cn/jiaoshi/bangong/check.asp'  #验证密码的网站
    try:
        session.post(post_url, data=data) #先登陆验证密码网站
        data=session.get('http://jiaowu.sicau.edu.cn/xuesheng/bangong/main/index1.asp')#跳转到个人主页
        data.encoding='gb2312'
        name=re.compile('<td width="99" align="left">(.*)</td>').findall(data.text)  #正则匹配你的名字
        print('欢迎你,'+name[1])         #输出欢迎你,xxx
    except Exception as e:
        print('登陆失败')
id=input('输入你的账号:\n')
pwd=input('输入你的密码:\n')
log_scau(id,pwd)


之前需要三步,现在只需要两步,少了添加header这一步,为什么呢?

首先我们必须了解cookie 和 session:

因为http是无状态协议,不会记录你的任何信息,但有时候你想要服务器记住一些数据(比如说密码),这时候就需要用到cookie或者session,    两者区别 ---cookie保存在本地硬盘上,session保存在服务器上,cookie有'保质期',过期失效,session过期时间由服务器决定,一般是关闭浏览器后失效。

session:   当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session对应的访问权限,然后给予回应

cookie是将数据加密后放入本地,需要用的时候发送给服务器,服务器解密后给予回应。

模拟登陆川农教务个人主页分为三步:

1,访问主页  2,访问检验密码的网站  3。密码验证成功跳转到个人主页

三步骤必须连续进行(直接用以前cookie访问的方式除外),那么怎么保证连续访问呢?

方法1:用cookie,----把主页的给的饼干(cookie)传给验证网站,让验证网站知道你是从主页来的,密码验证成功后验证网站觉得你诚实可爱,再给你些饼干(cookie),最后你把这两次给的饼干(cookie)给个人主页看,个人主页看了饼干(cookie)后知道你是自己人,允许访问。

方法2:-session,把cookie交给requests自行处理,她会自动帮你提交cookie。很贴心,细不细?

总之,session会自动帮你处理header,这样就省了不少精力,代码自然就减少了。但动态网站的header还是要自行添加的(此处略)



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值