Python利用requests.Session對象模擬瀏覽器登陸cnblogsjavascript
request.Session對行能夠跨請求的保持cookie,很是方便的用於模擬登陸。html
cnblogs登陸頁面分析:java
登陸頁面https://passport.cnblogs.com/user/signinpython
使用抓包工具fiddler(wireshark沒法抓取)能夠抓取到登陸時post的數據:算法
共三個字段,分別是input一、input2和remember(用戶名、密碼、是否記住登陸信息)。json
其中,input1和input2是通過RSA加密後的密文。瀏覽器
爲記住登陸狀態,咱們還須要抓取cookie (注意,要抓取主頁的cookie):安全
抓到以上必須數據後,就能夠模擬瀏覽器來登陸cnblogs,具體代碼實現以下:服務器
#!/usr/bin/python # _*_ coding:utf-8 _*_ import requests s=requests.Session() headers={ 'Accept':'application/json, text/javascript, */*; q=0.01', 'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36', 'Referer':'https://passport.cnblogs.com/user/signin', 'Cookie':'.CNBlogsCookie=B1CB9D692BDF8CE3E5E16C879498AB7E4624CAxxxxxxxxxx4C494C503E65A81B35BBD5C05991503E855C0B917DF1FA1B6C2855821AAE66F474C555653FD8812C6BEA6235FC15E6E6963ABF3716F8B3D8D4B840;_ga=GA1.2.372503701.1486351394' } log_data={ 'input1':'n8utCFvFkeDcjTR2uXy2XtwwVFJX/xxxxxxxxxxw1GrGY1W13otnJGsb6ojcd0N9MHMzbNlp6/jXMryq5wVUk/UOW98X1ZDmtb4k3UmLelQ9ugiHcKdxVherIFLVvXOfCAPsmUDZt5ir09k4svPtrMo6MDHlkEk4qSDDl3EJfnjU=', 'input2':'B5DjZEwPm2i06iCgiAJe8SU4YlrvrxxxxxxxxIM4ZqCf+WXhjW3Zw9eMfKiZS0ZalnTNGG441vjiIGzzDX/mzmWpMrP9j2ydIqd7bUwLsIyc2ZV4S4THjZp5vgqqxRLbF+kfOGUsQ2VJl1UmFc2S1FSd8i3wdZUol23t0a30=', 'remember':'false' } url ='https://passport.cnblogs.com/user/signin' req=s.post(url,data=log_data,headers=headers) print req.status_code print req.content.decode('utf-8') f=s.get('http://www.cnblogs.com/ahaii/diary/2016/01/28/5167172.html',headers=headers)#查看某一篇日記 print f.status_code print f.text
補充:cookie
一、關於https加密:
https即http+ssl加密傳輸方式,使用443端口,對傳輸的數據進行加密。
對稱加密與非對稱加密:
對稱加密:數據發送和接收端使用同一私鑰,較不安全。
加密:明文+算法+私鑰=>密文 解密:密文+算法+私鑰=>明文
非對稱加密:數據發送和接收端使用一對密鑰(公鑰和私鑰)對數據加密,兩者成對出現。公鑰對外公開,私鑰保存。
被公鑰加密的密文只能使用私鑰解密:
加密:明文+算法+公鑰=>密文 解密:密文+算法+私鑰=>明文
被私鑰加密的密文只能使用公鑰解密:
加密:明文+算法+私鑰=>密文 解密:密文+算法+公鑰=>明文
二、關於https鏈接創建過程:
整個過程當中會涉及到三個密鑰