2017-05-16 18 views
0

我從我自己簽署github而不使用API​​,但使用請求module.I設法得到這個代碼,我得到了200個狀態碼,但仍然有一條消息是「不正確的用戶名或密碼」。即使憑據是正確的!嘗試登錄使用python,但沒有API的Github

任何幫助表示讚賞。謝謝。

import requests 
from bs4 import BeautifulSoup 


def github_login(): 

s = requests.Session() 
git = BeautifulSoup(s.get('https://github.com/login').text, 'html.parser') 
auth_token = git.find("input", {"name": "authenticity_token"}).attrs['value'] 
commit = git.find("input", {"name": "commit"}).attrs['value'] 



data = { 
    'username': 'username', 
    'password': 'password', 
    'commit' : commit, 
    'authenticity_token' : auth_token 
} 

headers = { 
    "Host": "www.github.com", 
    "Origin": "https://www.github.com", 
    "X-Requested-With": "XMLHttpRequest", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5", 
} 

login = s.post('https://github.com/session', data=data) 

print (login.status_code) 
print(login.text) 


github_login() 
+0

爲什麼有關係嗎?我真的不明白 –

+0

爲什麼使用這種方法?因爲我在教自己的網絡報廢和建設機器人,所以這裏來的主意 – Mohamed

+0

我玩了這一點,我發現的唯一的事情是,它似乎並沒有要求傳遞餅乾像我期望使用會話。我做的唯一其他更改是在表單中包含utf8字段。 – lolsborn

回答

0

我解決了這個問題,這是在POST請求以下......「用戶名」應爲「登錄」

data = { 
'login': 'username', 
'password': 'password', 
'commit' : commit, 
'authenticity_token' : auth_token 
} 
1

很多像這樣的表單都隱藏了防止xss,回放和其他自動登錄嘗試的輸入字段。您可能需要提交隱藏字段中包含的所有額外表單數據。

<input type="hidden"> 

看來github使用cookies。因此,這裏可能發生的是您收到包含您的Cookie信息的重定向回覆,但請求會跟隨該重定向,但不會設置Cookie。

嘗試關閉重定向在您的要求

allow_redirects=False 
+0

我想我可以知道使用HTTP代理髮送了什麼請求,比如charles或其他東西? – Mohamed

+0

[這裏是發送請求發送的圖片](http://imgur.com/a/Xm1Lu) – Mohamed

+0

您可能不需要使用代理,只需解析所有其他輸入元素即可表格,看看是否還有其他東西丟失。而且,這顯然不適用於擁有2FA的用戶。 – lolsborn