最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年12月26日 10:54:22   作者:pypypypy  
這篇文章主要介紹了python requests模擬登陸github的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1. Cookie 介紹

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

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

2.requests使用cookie

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

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

3. POST 表單

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

調用requests的 POST 方法時,可以用data參數(shù)接收一個 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 試試看

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

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

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

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

  1. commit
  2. utf8
  3. authenticity_token
  4. login
  5. password

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

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

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

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

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 一致的 HTTP 請求頭部信息。具體來說,其中的User-Agent是比較重要的。

2. 仿照瀏覽器與服務器的通信,我們創(chuàng)建了一個requests.Session。

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

4. 將所需的數(shù)據(jù),整備成一個 Python 字典login_data

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

6. 最終的結果經(jīng)由302跳轉,打開了(200)GitHub 首頁.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python3通過Luhn算法快速驗證信用卡卡號的方法

    Python3通過Luhn算法快速驗證信用卡卡號的方法

    這篇文章主要介紹了Python3通過Luhn算法快速驗證信用卡卡號的方法,涉及Python中Luhn算法的使用技巧,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • 一篇文章帶你順利通過Python OpenCV入門階段

    一篇文章帶你順利通過Python OpenCV入門階段

    這篇文章主要介紹了Python OpenCV的知識體系,文章中涉及到的知識點很多,需要了解這方面知識的小伙伴可以慢慢理解,慢慢學習
    2021-08-08
  • Python自動化測試pytest中fixtureAPI簡單說明

    Python自動化測試pytest中fixtureAPI簡單說明

    這篇文章主要為大家介紹了Python自動化測試pytest中fixtureAPI的簡單說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • Python讀取YAML文件過程詳解

    Python讀取YAML文件過程詳解

    這篇文章主要介紹了Python讀取YAML文件過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Django 解決新建表刪除后無法重新創(chuàng)建等問題

    Django 解決新建表刪除后無法重新創(chuàng)建等問題

    這篇文章主要介紹了Django 解決新建表刪除后無法重新創(chuàng)建等問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python求凸包及多邊形面積教程

    Python求凸包及多邊形面積教程

    這篇文章主要介紹了Python求凸包及多邊形面積教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • numpy.ndarray 交換多維數(shù)組(矩陣)的行/列方法

    numpy.ndarray 交換多維數(shù)組(矩陣)的行/列方法

    今天小編就為大家分享一篇numpy.ndarray 交換多維數(shù)組(矩陣)的行/列方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 在vscode中啟動conda虛擬環(huán)境的思路詳解

    在vscode中啟動conda虛擬環(huán)境的思路詳解

    這篇文章主要介紹了在vscode中啟動conda虛擬環(huán)境的思路詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Pandas空值處理全攻略

    Pandas空值處理全攻略

    在進行數(shù)據(jù)分析和建模時,空值的存在會給結果帶來很大影響,本文主要介紹了Pandas空值處理全攻略,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • Pydantic中Optional 和Union類型的使用

    Pydantic中Optional 和Union類型的使用

    本文主要介紹了Pydantic中Optional 和Union類型的使用,這兩者在處理可選字段和多類型字段時尤為重要,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04

最新評論

德阳市| 高陵县| 手游| 上思县| 兴义市| 那曲县| 平安县| 苍溪县| 民权县| 曲周县| 万源市| 滨海县| 怀仁县| 柳州市| 镇沅| 澄江县| 丽江市| 朔州市| 汶上县| 新邵县| 昌吉市| 泌阳县| 平塘县| 西乌| 乌海市| 临泉县| 南丰县| 德阳市| 叶城县| 赞皇县| 景东| 石泉县| 宜兰县| 方城县| 伊川县| 东海县| 秭归县| 明光市| 壶关县| 吉首市| 赤城县|