2017-09-05 59 views
1

我的目標是在github中創建一個已認證的會話,這樣我就可以使用高級搜索(限制未經認證的用戶的功能)。目前,我收到來自「What?Your browser did not unexpected」的帖子請求的網頁響應,如果問題仍然存在,請與我們聯繫。使用python requests模塊在Github中創建一個已認證的會話

這是我用來完成我的任務的代碼。

import requests 
from lxml import html 

s = requests.Session() 
payload = (username, password) 
_ = s.get('https://www.github.com/login') 
p = s.post('https://www.github.com/login', auth=payload) 

url = "https://github.com/search?l=&p=0&q=language%3APython+extension%3A.py+sklearn&ref=advsearch&type=Code" 
r = s.get(url, auth=payload) 
text = r.text 
tree = html.fromstring(text) 

是我想要的嗎?我寧願不使用github v3 api,因爲它的速度有限,而且我想更多地利用我自己的高級搜索功能。謝謝。

+0

我假設您需要OAuth登錄,但我可能是錯誤的 –

+0

感謝您的迴應,我會檢查。 –

+0

您正在嘗試使用HTTP基本身份驗證,但GitHub使用基於表單的登錄機制。您需要檢查登錄頁面以確定您應該向哪個終端發送必要字段(可能包括靜態字段,包​​括登錄表單本身)的響應。 – larsks

回答

1

正如評論中所述,github使用發佈數據進行身份驗證,因此您應該在data參數中擁有您的信用。
您必須提交的元素是'login''password''authenticity_token''authenticity_token'的值是動態的,但您可以從'/login'中刪除它。
最後提交data/session並且您應該有認證會話。

s = requests.Session() 
r = s.get('https://www.github.com/login') 
tree = html.fromstring(r.content) 
data = {i.get('name'):i.get('value') for i in tree.cssselect('input')} 
data['login'] = username 
data['password'] = password 
r = s.post('https://github.com/session', data=data)