2017-05-16 10 views
0

APIを使わずにリクエストモジュールを使用してgithubにサインインするのは自分自身の挑戦でした。このコードを取得してもステータスコードは200ですが「不正なユーザー名またはパスワード」というメッセージが表示されます。資格が正しい場合でも!GithubにPythonを使用していますが、APIは使用していません

ありがとうございました。ありがとう。

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

で次のリダイレクトをオフにしてください、私は問題を解決し、それが後の要求にあった...「ユーザ名が」「ログイン」しかし

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

このようなフォームには、xss、再生、その他の自動ログインの試行を防ぐための非表示の入力フィールドがあります。隠しフィールドに含まれる余分なフォームデータをすべて提出する必要があります。

<input type="hidden"> 

githubはCookieを使用しているようです。だから、ここで起こっていることは、あなたのためにクッキー情報を含むリダイレクト応答が得られているということですが、要求はそのリダイレクトに従いますが、クッキーを設定しません。

リクエスト

allow_redirects=False 
+0

私は、正確に何かがチャールズか何かのようなHTTPプロキシを使用して投稿要求に送信されて知っていると思う? – Mohamed

+0

[ここではポストリクエストで送信されるものの写真です](http://imgur.com/a/Xm1Lu) – Mohamed

+0

プロキシを使用する必要はないでしょう。他のすべての入力要素を解析してくださいあなたが欠けているものが他にもあるかどうかを確認してください。また、明らかに2FAを持っているユーザーとはうまく動作しません。 – lolsborn

関連する問題