1、首先通过fiddler来抓包,主要抓登录前的接口,登录后的接口(登录后的抓发布博客的接口),并对比登录前,登录后的cookies,把登录后的cookies不同的Key,value取出来。
上图为我们需要抓取的三个使用接口,前两个对比取cookies
注意:使用fiddler在火狐浏览器上面抓包时有可能提示连接不安全,解决方法是可以在fiddler里面导出证书到桌面,然后在火狐浏览器中导入该证书即可,具体怎么导入请谷歌或百度。
2、提取cookies:
提取登录前、后的cookies,放在文件比较工具中比较差异,差异部分提取出来,这部分应当就是我们的登录cookies了,通过requests库去发请求完成我们要完成的工作(发博客)
贴上代码:
@software: PyCharm @file: postscdn.py @time: 2018/3/12 14:42 """ import requests import json #定义一个浏览器 s = requests.session() c = requests.cookies.RequestsCookieJar() print(c) #添加登录cookies到浏览器,考虑到个人安全,这部分cookies做了替代处理。。。。
c.set("UserName","**************") c.set("UserInfo","**************") c.set("UserNick","*************") c.set("AU","********") c.set("Hm_lpvt_6bcd52f51e9b3dce32be************","*******") c.set("dc_tos","******") #更新下cookies s.cookies.update(c) print(s.cookies) url2 = "http://mp.blog.csdn.net/postedit" h2 = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36"} #点击写博客 re2 = s.get(url2,headers=h2) print(re2.status_code) print(re2.text) url3 = "http://mp.blog.csdn.net/postedit/saveArticle" #写博客要传入的参数 payload = {"titl":"good", "typ":"1", "cont":"sfdsfsfsfsfsdfsfdfsfsds", "categories":"Python", "chnl":16, "level":0, "tag2":"", "artid":0, "private":"false", "stat":"draft"} #写一篇博客把它存为草稿 re3 = s.post(url3,data=payload) print(re3.status_code) #数据中的unicode字符转中文 print(re3.content.decode("unicode-escape")) content3 = re3.content.decode("unicode-escape") print(type(content3)) content3_dict = json.loads(content3) content = content3_dict["content"] print("-----取字典中的content对应value------") if content == "保存成功。": print("success") else: print("登录失败!") #把文章发布出去 url4 = "http://mp.blog.csdn.net/postedit/saveArticle?isPub=1" payload_fabiao = payload = {"titl":"goodfs", "typ":"1", "cont":"sfdsfsfsfsfsdfsfdfsfs", "categories":"Python", "chnl":16, "level":0, "tag2":"", "artid":0, "private":"false", "stat":"publish"} re_fabiao = s.post(url4,data=payload_fabiao) print(re_fabiao.content.decode("unicode-escape")) note_url = json.loads(re_fabiao.content.decode("unicode-escape"))["data"] print("发表的文章地址:" + note_url)
运行后结果: