Python模擬登陸cnblogs

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鏈接創建過程:

整個過程當中會涉及到三個密鑰

  • 服務器端的公鑰與私鑰,用來進行非對稱加密
  • 客戶端生成的隨機密鑰,用來對數據進行對稱加密
  1. 客戶端發起https請求,用戶輸入一個https網址之後,訪問服務器的443端口
  2. 服務器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,服務器端保存着私鑰,不能將其泄露,公鑰能夠發送給任何人。
  3. 傳送證書,也就是公鑰,服務端將公鑰傳給客戶端。
  4. 客戶端解析證書,客戶端收到服務器發過來的公鑰之後先要對其有效性進行校驗,若是公鑰有問題則沒法進行https傳輸,這個公鑰也就是服務器發過來的數字證書。若是沒有問題,則會生成一個隨機值,這個隨機值就是對於對稱加密的密鑰。而後用服務端發過來的公鑰對這個隨機值(也就是客戶端私鑰)進行非對稱加密,至此,HTTPS中的第一次HTTP請求結束。
  5. 客戶端會發起HTTPS中的第二個HTTP請求,將加密以後的客戶端密鑰發送給服務器。
  6. 服務器接收到客戶端發來的密文以後,會用本身的私鑰對其進行非對稱解密,解密以後的明文就是客戶端密鑰,而後用客戶端密鑰對數據進行對稱加密,這樣數據就變成了密文。
  7. 而後服務器將加密後的密文發送給客戶端。
  8. 客戶端收到服務器發送來的密文,用客戶端密鑰對其進行對稱解密,獲得服務器發送的數據。這樣HTTPS中的第二個HTTP請求結束,整個HTTPS傳輸完成。
相關文章
相關標籤/搜索