2017-09-05 5 views
1

githubで認証セッションを作成したいので、高度な検索(認証されていないユーザーに機能を制限します)を使用できます。現在、私はあなたのブラウザが予期せぬことをしたというポストリクエストからウェブページの回答を得ています。問題が解決しない場合は、私たちに連絡してください。Pythonリクエストモジュールを使用して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はフォームベースのログインメカニズムを使用しています。ログインページを調べて、必要なフィールド(ログインフォーム自体を含む静的フィールドを含むかもしれない)で応答を 'POST 'するべきエンドポイントを判断する必要があります。 – 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) 
関連する問題