Question
解决编写爬虫时手动输入headers的问题
Solutions
1. 打开请求页面F12
2. 对相应的链接右键copy as cURL(bash)
3. 打开url:https://curlconverter.com/ 然后选择python 复制到表单中即可
解决编写爬虫时手动输入headers的问题
1. 打开请求页面F12
2. 对相应的链接右键copy as cURL(bash)
3. 打开url:https://curlconverter.com/ 然后选择python 复制到表单中即可
pip freeze > requirements.txt会将当前虚拟环境所有包进行打印并输出
但很多时候我们只需要输出当前项目所依赖的项目包
在项目的根目录下使用 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 configparser模块不区分大小写问题
经源码分析,configparser内部存在自动转化小写代码.
def optionxform(self, optionstr):
return optionstr.lower()
找到原因,只需要重写该函数即可。
class myconf(configparser.ConfigParser):
def __init__(self,defaults=None):
configparser.ConfigParser.__init__(self,defaults=None)
# 区分大小写
def optionxform(self, optionstr):
return optionstr
git push >> fatal: no configured push destination
像返回错误所说,我们在download下来的自由仓库想push上去除了进行下列操作
git init
git add *
还需要添加远程仓库
git remote add origin git@github.com:
/demo_app.git
git push -u origin master
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: