麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Python > 正文

python requests模擬登陸github的實現(xiàn)方法

2024-09-09 19:03:31
字體:
供稿:網(wǎng)友

1. Cookie 介紹

HTTP 協(xié)議是無狀態(tài)的。因此,若不借助其他手段,遠程的服務(wù)器就無法知道以前和客戶端做了哪些通信。Cookie 就是「其他手段」之一。 Cookie 一個典型的應(yīng)用場景,就是用于記錄用戶在網(wǎng)站上的登錄狀態(tài)。

用戶登錄成功后,服務(wù)器下發(fā)一個(通常是加密了的)Cookie 文件。 客戶端(通常是網(wǎng)頁瀏覽器)將收到的 Cookie 文件保存起來。 下次客戶端與服務(wù)器連接時,將 Cookie 文件發(fā)送給服務(wù)器,由服務(wù)器校驗其含義,恢復(fù)登錄狀態(tài)(從而避免再次登錄)。

2.requests使用cookie

當(dāng)瀏覽器作為客戶端與遠端服務(wù)器連接時,遠端服務(wù)器會根據(jù)需要,產(chǎn)生一個 SessionID,并附在 Cookie 中發(fā)給瀏覽器。接下來的時間里,只要 Cookie 不過期,瀏覽器與遠端服務(wù)器的連接,都會使用這個 SessionID;而瀏覽器會自動與服務(wù)器協(xié)作,維護相應(yīng)的 Cookie。

requests中,也是這樣。我們可以創(chuàng)建一個requests.Session,爾后在該 Session 中與遠端服務(wù)器通信,其中產(chǎn)生的 Cookie,requests會自動為我們維護好。

3. POST 表單

post 方法可以將一組用戶數(shù)據(jù),以表單的形式發(fā)送到遠端服務(wù)器。遠端服務(wù)器接受后,依照表單內(nèi)容做相應(yīng)的動作。

調(diào)用requests的 POST 方法時,可以用data參數(shù)接收一個 Python 字典結(jié)構(gòu)。requests會自動將 Python 字典序列化為實際的表單內(nèi)容。例如:

import requestscs_url  = 'http://httpbin.org/post'my_data  = {  'key1' : 'value1',  'key2' : 'value2'}r = requests.post (cs_url, data = my_data)print r.content

4. 實際模擬登錄 GitHub 試試看

模擬登錄的第一步,首先是要搞清楚我們用瀏覽器登錄時都發(fā)生了什么。

GitHub 登錄頁面是https://github.com/login。我們首先清空瀏覽器 Cookie 記錄,然后用 Chrome 打開登錄頁面。填入 Username 和 Password 之后,我們打開 Tamper Chrome 和 Chrome 的元素審查工具(找到 Network 標(biāo)簽頁),之后點登錄按鈕。

在 Tamper Chrome 中,我們發(fā)現(xiàn):雖然登錄頁面是https://github.com/login,但實際接收表單的是https://github.com/session。若登錄成功,則跳轉(zhuǎn)到https://github.com/首頁,返回狀態(tài)碼200

而在 Chrome 的審查元素窗口中,我們可以看到提交給session接口的表單信息。內(nèi)里包含

commit utf8 authenticity_token login password

其中,commitutf8兩項是定值;loginpassword分別是用戶名和密碼,這很好理解。唯獨authenticity_token是一長串無規(guī)律的字符,我們不清楚它是什么。

POST 動作發(fā)生在與session接口交互之前,因此可能的信息來源只有login接口。我們打開 login 頁面的源碼,試著搜索authenticity_token就不難發(fā)現(xiàn)有如下內(nèi)容:

<input name="authenticity_token" type="hidden" value="......" />

原來,所謂的authenticity_token是明白寫在 HTML 頁面里的,只不過用hidden模式隱藏起來了。為此,我們只需要使用 Python 的正則庫解析一下,就好了。

import requestsimport relogin_url = 'https://github.com/login'user = 'user' //具體賬號password = 'password'  //具體密碼user_headers = {  'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',  'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',  'Accept-Encoding' : 'gzip',  'Accept-Language' : 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4'}session = requests.Session()response = session.get(login_url, headers = user_headers)pattern = re.compile(r'<input name="authenticity_token" type="hidden" value="(.*)" />')authenticity_token = pattern.findall(response.content)[0]login_data = {    'commit' : 'Sign in',    'utf8' : '%E2%9C%93',    'authenticity_token' : authenticity_token,'login' : user,    'password' : password}session_url = 'https://github.com/session'response = session.post(session_url, headers = user_headers, data = login_data)
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 羞羞答答视频 | 国产艳妇av视国产精选av一区 | 动漫孕妇被羞羞视频 | 一级做a爱片性色毛片 | 黄色网电影 | 亚洲精品一区二区三区免 | 久久96国产精品久久久 | 久久激情小视频 | 午夜视频在线观看91 | 黄色aaa视频| 7777在线视频免费播放 | 少妇的肉体2无删减版 | 国产日韩一区二区三区在线观看 | 男人午夜小视频 | 91九色蝌蚪国产 | 得得啪在线 | 欧美一级黄视频 | 国产亚洲精品成人 | 欧美一区二区三区免费不卡 | 国产精选久久久 | 久久精品99久久久久久2456 | 日韩大片在线永久观看视频网站免费 | 一级性色 | 国产精品久久久久久久久久电影 | sese综合| 玖草| 久久草在线视频免费 | 视频一区二区中文字幕 | www.17c亚洲蜜桃| 久久精品之 | h视频在线免费观看 | 久久综合伊人 | 成人av一二三区 | 露脸各种姿势啪啪的清纯美女 | 狠狠干导航 | 一级电影免费在线观看 | 久久久成人精品视频 | 91网视频 | 久久欧美亚洲另类专区91大神 | 久久新网址 | 色综合久久久久久久久久 |