簡介
前面登錄博客園的是傳 json 參數,由於其登錄機制的改變沒辦法演示,然而在工作中有些登錄不是傳 json 的,如 jenkins 的登錄,這里小編就以jenkins 登錄為案例,傳 data 參數,給各位童鞋詳細演練一下。
一、登錄jenkins抓包
1、瀏覽器上登錄jenkins,輸入賬號和密碼,點擊登錄
2、fiddler抓包工具抓取jenkins登錄的過程
3、可以清楚地看到這個body參數並不是json格式,是key=value格式,也就是前面介紹post請求四種數據類型里面的第一種
二、請求頭部
1.上面抓包已經知道body的數據類型了,那么頭部里面Content-Type類型也需要填寫對應的參數類型
三、實現登錄
1、登錄實例代碼如下:
注意:此處的登錄URL是fiddler抓包抓到的,而並非是瀏覽器的URL地址,如果你復制的是瀏覽器的地址,就會報錯了
1 # coding:utf-8 2 import requests 3 # 先打開登錄首頁,獲取部分session 4 url = "http://localhost:8080/jenkins/j_acegi_security_check" 5 headers = { 6 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0" 7 } # get方法其它加個ser-Agent就可以了 8 d = {"j_username": "admin", 9 "j_password": "111111", 10 "from": "", 11 "Submit": u"登錄", 12 "remember_me": "on" 13 } 14 s = requests.session() 15 r = s.post(url, headers=headers, data=d) 16 print (r.content.decode('utf-8')
)
2、運行后的結果如下:
3、為了更好地查看你可以將其拷貝到記事本,保存,然后將文件后綴名修改成.html或者.htm,用瀏覽器打開查看
四、判斷登錄是否成功
1.首先這個登錄接口有重定向,看左邊會話框302,那登錄成功的結果看最后一個200就行
2.返回的結果並不是跟博客園一樣的json格式,返回的是一個html頁面
五、判斷登錄成功
1.判斷登錄成功,可以抓取頁面上的關鍵元素,比如:賬號名稱admin,注銷按鈕
2.通過正則表達式提出這2個關鍵字
六、參考代碼
1 # coding:utf-8 2 import requests 3 # 先打開登錄首頁,獲取部分session 4 url = "http://localhost:8080/jenkins/j_acegi_security_check" 5 headers = { 6 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0" 7 } # get方法其它加個ser-Agent就可以了 8 d = {"j_username": "admin", 9 "j_password": "111111", 10 "from": "", 11 "Submit": u"登錄", 12 "remember_me": "on" 13 } 14 s = requests.session() 15 r = s.post(url, headers=headers, data=d) 16 #print (r.content.decode('utf-8')) 17 # 正則表達式提取賬號和登錄按鈕 18 import re 19 t = re.findall(r'<b>(.+?)</b>', r.content.decode('utf-8')) # 用python3的這里r.content需要解碼 20 print (t[0]) 21 print (t[1])
七、遇到問題可解決方法
注意這里邊遇到的問題python3遇到的問題,或許python2沒有這些問題,筆者沒有實踐,有興趣的自己可以試一下
1、如果打印content,沒有加后邊的.decode('utf-8'),會出現亂碼,解決方法加上即可。
2、如果正則提取沒有加.decode('utf-8'),會報如下錯誤,解決方案也是加上即可
八、小結
jenkins 代碼模擬登陸到這里就結束,實際工作中的登錄接口也就是這些,記住萬變不離其宗,舉一反三。