日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > python requests模擬登陸github

python requests模擬登陸github

來源:程序員人生   發布時間:2016-08-08 11:45:54 閱讀次數:2479次

1. Cookie 介紹

        HTTP 協議是無狀態的。因此,若不借助其他手段,遠程的服務器就沒法知道之前和客戶端做了哪些通訊。Cookie 就是「其他手段」之1。 Cookie 1個典型的利用場景,就是用于記錄用戶在網站上的登錄狀態。

  1. 用戶登錄成功后,服務器下發1個(通常是加密了的)Cookie 文件。
  2. 客戶端(通常是網頁閱讀器)將收到的 Cookie 文件保存起來。
  3. 下次客戶端與服務器連接時,將 Cookie 文件發送給服務器,由服務器校驗其含義,恢復登錄狀態(從而避免再次登錄)。

         當閱讀器作為客戶端與遠端服務器連接時,遠端服務器會根據需要,產生1個 SessionID,并附在 Cookie 中發給閱讀器。接下來的時間里,只要 Cookie 不過期,閱讀器與遠端服務器的連接,都會使用這個 SessionID;而閱讀器會自動與服務器協作,保護相應的 Cookie。

        在 requests 中,也是這樣。我們可以創建1個 requests.Session,爾后在該 Session 中與遠端服務器通訊,其中產生的 Cookie,requests 會自動為我們保護好。

3. POST 表單

       post 方法可以將1組用戶數據,以表單的情勢發送到遠端服務器。遠端服務器接受后,依照表單內容做相應的動作。

       調用 requests 的 POST 方法時,可以用 data 參數接收1個 Python 字典結構。requests 會自動將 Python 字典序列化為實際的表單內容。例如:

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

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

      摹擬登錄的第1步,首先是要弄清楚我們用閱讀器登錄時都產生了甚么。

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

     在 Tamper Chrome 中,我們發現:雖然登錄頁面是 https://github.com/login,但實際接收表單的是 https://github.com/session。若登錄成功,則跳轉到 https://github.com/ 首頁,返回狀態碼 200。
Tamper Chrome 截圖

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

  • commit
  • utf8
  • authenticity_token
  • login
  • password

Chrome 審查元素截圖

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

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

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

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

import requests import re login_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)

        1. 首先,我們準備好了和 Chrome 1致的 HTTP 要求頭部信息。具體來講,其中的 User-Agent 是比較重要的。

        2. 仿照閱讀器與服務器的通訊,我們創建了1個 requests.Session。

        3. 我們用 GET 方法打開登錄頁面,并用正則庫解析到 authenticity_token

        4. 將所需的數據,整備成1個 Python 字典login_data

        5. 最后,用 POST 方法,將表單提交到 session 接口。

        6. 終究的結果經過 302 跳轉,打開了(200)GitHub 首頁.


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久99精品久久久久久久青青日本 | 久久久久99精品国产片 | 欧美一级电影 | 国产精品伦一区二区三级视频 | 日韩激情 | 国产精品久久久久久久久久久新郎 | 亚洲激情在线观看 | 久久久一区二区三区 | 欧美日韩不卡在线 | 网友自拍第一页 | 91看片淫黄大片 | a在线资源 | 男女免费视频网站 | 欧美一区二区三区在线观看视频 | av黄网| 91网站在线看 | 国产精品国产精品国产专区不蜜 | 不卡一二三区 | 久久九九视频 | 久久中文字幕一区二区 | 一区二区三区免费在线观看 | 成人福利午夜 | 成人91在线 | 日本福利一区二区三区 | 欧美日韩精品一区二区 | 欧美亚一区二区 | 黄色成人在线电影 | av在线激情| 在线观看日韩精品 | 天天揉久久久久亚洲精品 | 欧美日韩精品免费观看视频 | 日韩成人在线视频 | 日本a在线播放 | 黄a免费视频 | 中国av免费在线观看 | 成人97 | 日韩精品视频在线免费观看 | 国产成人黄色 | 国产精品久久久久9999鸭 | 久久九九久久九九 | 日韩 国产 欧美 |