zoukankan      html  css  js  c++  java
  • Python实现自动登录/登出校园网网关

        学校校园网的网络连接有免费连接和收费连接两种类型,可想而知收费连接浏览体验更佳,比如可以访问更多的网站。之前收费地址只能开通包月服务才可使用,后来居然有了每个月60小时的免费使用收费地址的优惠。但是,一旦连接了收费地址而忘记及时断开,60小时会很快用完。 
        为了节约收费地址的使用时间,采用如下方案:每隔1个小时,都在本机上断开校园网的收费连接,同时连接免费连接,这样,每次手动连接收费连接之后,最多使用1个小时,就会被自动断开。

    1. python实现连接/断开网络连接 
         通过执行python脚本,实现访问 its.pku.edu.cn 并设置连接/断开。 
    通过fiddler抓包,分析从访问 its.pku.edu.cn,到填写账号密码,再到最后登陆成功的过程中,浏览器和网关交互的http request和response。 

    python代码实现 

    #!/usr/bin/env python
    """python crawler """
    #encoding:UTF-8
    
    import requests
    import sys
    
    
    def login(type):
        """login work"""
        headers =  {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
             'Accept-Encoding': 'gzip, deflate, sdch, br',
             'Accept-Language': 'zh-CN,zh;q=0.8',
             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36'}
        s = requests.Session()
        s.headers = headers
        post_data = {'username': 'username', 'password': 'password', 'iprange': type}
        r = s.post('https://its.pku.edu.cn/cas/webLogin', data=post_data, verify=False)
        print "log in, status = %s" % r.status_code
    
    
    def logout(type):
        """logout work"""
        headers =  {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
             'Accept-Encoding': 'gzip, deflate, sdch, br',
             'Accept-Language': 'zh-CN,zh;q=0.8',
             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36'}
        s = requests.Session()
        s.headers = headers
        post_data = {'username': 'username', 'password': 'password', 'iprange': 'no'}
        s.post('https://its.pku.edu.cn/cas/webLogin', data=post_data, verify=False)
        #to logout!!
        r = s.get('https://its.pku.edu.cn/netportal/ITSipgw?cmd=close&type=%s&sid=478' % type, verify=False, headers=headers)
        print "log out, status = %s" % r.status_code
    
    
    if __name__ == '__main__':
        if len(sys.argv) != 2:
            print "usage <option: 1 (connect free), 2 (connect global), 3 (disconnect this computer), 4 (disconnect all), 5(disconnect this computer and connect free)"
            exit(1)
    
        option = int(sys.argv[1])
        if option == 1:
            print "try to connect free"
            login('no')
        elif option == 2:
            print "try to connect global"
            login('yes')
        elif option == 3:
            print "try to disconnect self"
            logout('self')
        elif option == 4:
            print "try to disconnect all"
            logout('all')
    

    2. 每1小时自动执行 
        linux下比较方便,直接设置 crontab即可。 
        windows下可以设置机器的自动任务计划,具体步骤如下: 
    (1)开始->所有工具->windows管理工具->任务计划程序 
    (2)创建任务 
    (2.1)常规 ——填写程序名称(随意) 
    (2.2)触发器 ——新建,设置为每天固定时间开始执行,每隔一个小时重复一次 

    (2.3)操作 ——新建,设置为执行python脚本,且设置正确的命令行参数 (包括python脚本路径和参数5)

  • 相关阅读:
    完全分布式安装HBase
    HDFS常用的文件API操作
    启动HBase后遇到的一个问题
    HBase常用的数据库API操作
    HBase数据库常用操作命令
    Hive安装
    eclipse中配置hadoop开发环境
    Hadoop小程序倒排索引
    我学习设计模式的一些所想所得
    架构之路实战项目记录(二) 忘记数据库 开始抽象
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/4903253.html
Copyright © 2011-2022 走看看