2016-07-23 60 views
2

我試圖登錄到GitHub上使用下面的代碼:如何使用POST請求模塊登錄到Github?

url = 'https://github.com/login' 

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', 
      'login':'username', 
      'password':'password', 
      'authenticity_token':'Token that keeps changing', 
      'commit':'Sign in', 
      'utf8':'%E2%9C%93' 
} 

res = requests.post(url) 
print(res.text) 

現在,res.text打印登錄頁面的代碼。我知道這可能是因爲令牌不斷變化。我也嘗試將網址設置爲https://github.com/session,但這也不起作用。

任何人都可以告訴我一種方法來生成令牌。我正在尋找一種不使用API​​登錄的方式。我問過another question我在哪裏提到我無法登錄。有一條評論說,我做得不對,可以在沒有Github API幫助的情況下使用請求模塊進行登錄。

ME:

所以,我可以登錄使用POST方法Facebook或Github上什麼?我試過了,但沒有奏效。

的用戶:

嗯,大概是你做錯了什麼

誰能告訴我我做錯了什麼?

有關使用會議的建議後,我已經更新了我的代碼:

s = requests.Session() 
headers = {Same as above} 

s.put('https://github.com/session', headers=headers)  
r = s.get('https://github.com/') 

print(r.text) 

我仍然不能讓過去的登錄頁面。

+0

爲什麼你不使用API​​? https://developer.github.com/v3/#authentication –

+0

我想不使用API​​。這不僅是關於登錄到GitHub。我會很滿意任何可以使用post方法的請求模塊在網站上執行某些操作(除了httpbin之類的網站)的實際情況。 –

回答

2

我想你會回到登錄頁面,因爲你被重定向,並且由於你的代碼沒有發送你的cookies,你不能有一個會話。

您正在尋找會話持久性,requests提供它:

會話對象Session對象允許您堅持跨請求某些 參數。它還會持續存儲來自Session實例的所有 請求中的cookie,並將使用urllib3的 連接池。因此,如果您向同一臺主機發出多個請求,底層TCP連接將被重新使用,這可能導致 顯着提高性能(請參閱HTTP持久性 連接)。

s = requests.Session() 

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') 
r = s.get('http://httpbin.org/cookies') 

print(r.text) 
# '{"cookies": {"sessioncookie": "123456789"}}' 

http://docs.python-requests.org/en/master/user/advanced/

+0

我仍然無法通過登錄頁面。 –