0

ファイルをgithubにアップロードできるように、Python3にoauth2クライアントを実装しようとしています。非常に基本的なスタートとして、 APIを使用して承認のリストを取得しようとしています。

このコードは機能します:

from subprocess import Popen,PIPE
user = 'MYUSERNAME'
pw   = 'MYPASSWORD'
git_url = "https://api.github.com/authorizations"
res = Popen(['curl','--user',user + ':' + pw,git_url],stdout=PIPE,stderr=PIPE).communicate()[0]
print(res)

このコードは機能しません:

user = 'MYUSERNAME'
pw   = 'MYPASSWORD'
git_url = "https://api.github.com/authorizations"
import urllib.request
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(realm=None,
                          uri=git_url,
                          user=user,
                          passwd=pw)
opener = urllib.request.build_opener(auth_handler)
f = opener.open(git_url)
print(f.read())

実際、次のエラーが生成されます。

Traceback (most recent call last):
  File "demo.py", line 18, in <module>
    f = opener.open("https://api.github.com/authorizations")
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/urllib/request.py", line 375, in open
    response = meth(req, response)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/urllib/request.py", line 487, in http_response
    'http', request, response, code, msg, hdrs)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/urllib/request.py", line 413, in error
    return self._call_chain(*args)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/urllib/request.py", line 347, in _call_chain
    result = func(*args)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/urllib/request.py", line 495, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

Python に既存の Oauth2 実装があることは知っていますが、それは python3 ではなく python2 であり、必要以上の機能を備えています。

また、Python プログラムで を呼び出すだけでよいこともわかっていcurlます。これが私のフォールバックです。

私が間違っていることを本当に知りたいです。

ありがとう。

4

1 に答える 1

1

python2の urllib2 を使用した完全な例を含む別の質問への回答を投稿しました。あなたが python3 に興味を持っていることは明らかですが、コードを移行するのは難しくありません。

それが役立つことを願って、

于 2012-07-23T22:49:28.190 に答える