分类目录归档:Develop

Headers to dict online

Question

解决编写爬虫时手动输入headers的问题

Solutions

1. 打开请求页面F12
2. 对相应的链接右键copy as cURL(bash)
3. 打开url:https://curlconverter.com/  然后选择python 复制到表单中即可

pip freeze only used packages

Question

pip freeze > requirements.txt会将当前虚拟环境所有包进行打印并输出

但很多时候我们只需要输出当前项目所依赖的项目包

Solution

在项目的根目录下使用 pipreqs ./

如果是Windows系统,会报编码错误

(UnicodeDecodeError: 'gbk' codec can't decode byte 0xa8 in position 24: illegal multibyte sequence)
使用时,指定编码格式

pipreqs ./ --encoding=utf8

生成requirements.txt 文件后,可以根据这个文件下载所有的依赖

pip install -r requriements.txt 即可

python config module case not distinguish

Question

python configparser模块不区分大小写问题

Analysis

经源码分析,configparser内部存在自动转化小写代码.

    def optionxform(self, optionstr):
        return optionstr.lower()

Solution

找到原因,只需要重写该函数即可。

class myconf(configparser.ConfigParser):
    def __init__(self,defaults=None):
        configparser.ConfigParser.__init__(self,defaults=None)
    # 区分大小写
    def optionxform(self, optionstr):
        return optionstr

Github push some question

Question

git push >> fatal: no configured push destination

Analysis

像返回错误所说,我们在download下来的自由仓库想push上去除了进行下列操作

git init
git add *

还需要添加远程仓库

git remote add origin git@github.com:/demo_app.git
git push -u origin master

济南大学CAS登陆详记

  • Description
    最近要开学了,需要7天的体温上报,之前漏了两天,想着写个脚本自动填报。最开始以为还挺容易的,登录验证拿个Cookie直接梭哈post就可以,后面...是我太年轻

  • Processing
    首先介绍下背景,济南大学的体温上报正常方式是走微信的智慧济大接口进行填报,很自然就想到抓个包找找提交接口然后python post即可,然后就迎来了第一个坑,夜神模拟器安卓7以后的Fiddler证书不支持自主导入了,这个你们可以google看看,有很多失败案例。解决方案如链接,大家可以进去看看~

  • Monitor SSL&Fiddler config
    解决方案:
    https://www.licqi.com/artikel/10314.html

  • Fiddler Traffic capture
    正常配置好上面的模拟器后,我们可以抓到接口
    url:'http://fanxiao.ujn.edu.cn/resultOffHealthyDay/addOffHealthyDay'
    什么?你想手动登录进去然后进页面直接填报?太年轻啦~你可以试试
    仔细看看我们抓的包携带的Cookie和你登陆完的Cookie JessionId是不一样的,所以你不能直接提交。
    其次是什么呢?前端页面有定位绕过限制,如果你不提前抓包,你是不知道微信提交的Latitude和Longtitdu的格式。总之,这条路也是不好走的,我们还是得解决这个Cookie怎么解决的问题。
    现在我们知道了,提交的Cookie是带Sig的,目标锁定在Sig获取上面。

  • Cookie sig analysis
    这里光看微信抓到的包相信已经作用不大了,我们尝试进入https://fanxiao.ujn.edu.cn/
    我们可以发现,这里是会给你重定向到一个登录界面的,选择统一身份验证,进去后记得打开好Fiddler开始抓包。
    我们可以看到整个请求过程是
    登录请求POST:https://sso.ujn.edu.cn/tpass/login?service=http://fanxiao.ujn.edu.cn/cas/index
    携带data:rsa/ul/pl/lt/execution/_eventId
    rsa:为学号、密码、lt字符拼接和DES加密生成的加密数据
    ul:学号长度
    pl:密码长度
    lt/execution:页面可以get请求得到,自己xpath可以拿到
    _eventId:固定为submit
    然后你会看到返回什么呢?这里埋个坑,你可能觉得我是不是请求失败了~
    然后你会发现整个抓包流有一个过程就是:登录请求->拿到票据->拿到Cookie{Jessionid&&Sig}
    对应的请求顺序为:
    first:https://sso.ujn.edu.cn/tpass/login?service=http://fanxiao.ujn.edu.cn/cas/index
    second:'http://fanxiao.ujn.edu.cn/cas/index?' + ticket
    经查阅资料,才知道这是CAS单点登录得流程顺序
    那么这个ticket哪里来呢?
    通过分析Fiddler返回请求头,可以发现,返回数据中有一个字段为
    Location,Location后面就有着我们要的ticket
    然后带上ticket拼接我们的Second步骤,就可以为我们的requests带上Cookie,也就能够对后台用户接口进行正常的请求,这里就以UserInfo为例子进行请求,可以发现是可以拿到数据的。
    UserInfo:http://fanxiao.ujn.edu.cn/api/auth/userInfo
    至此,大工程已经可以说完成了,我们的sig也添加到了我们的返回请求头中。
    最后是提交体温上报的接口中:
    体温上报:http://fanxiao.ujn.edu.cn/resultOffHealthyDay/addOffHealthyDay

  • 源代码
    url: