友達。
個人の Github ログインを取得し、それを使用して Github API に認証トークンを照会する短いスクリプトを作成しています。コードは次のとおりです。
def getGithubAuth():
"Get a Github auth token and return it"
gist_data = json.dumps({"scopes":["gist"]})
req = urllib2.Request(auth_url)
base64str = base64.encodestring("%s:%s" % \
(github_user, github_pass)).replace('\n','') # user/pass vars are declared elsewhere
req.add_header("Authorization", "Basic %s" % base64str);
req.add_data(gist_data) # <- including this makes problems
try:
response = urllib2.urlopen(req)
except urllib2.URLError, e:
print "Something broke connecting to Github: %s" % e
return None
if response.getcode() == 200:
jresp = json.loads('\n'.join(response.readlines()))[0]
return jresp['token']
return None
呼び出しを削除するadd_data
と、リクエストが機能し、認証トークンが返されます。add_data
問題は、 Github の Gist 機能と対話できる認証トークンを受け取るために、渡されたデータを含める必要があることです。
私の2つの質問
- Github が認識して受け入れるように、このデータをリクエストに追加するにはどうすればよいですか?
- 近いうちに、より大きなデータ セットを送信する必要がある同様の状況に陥ることが予想されます。より複雑な値のセット (ネストされた値を持つ大規模な辞書など) を渡すにはどうすればよいですか?
私が試したこと
値を送信する前に値をエンコードするために使用する必要があると言っているインターネットのことをいくつか見つけましたが、リストを期待し、タプルのリストを期待しurllib.urlencode
ているため、それを機能させることができませんでした。scopes
urlencode
私はここで何か愚かなことをしていると100%確信しているので、それが何であるか教えていただければ幸いです:)
ありがとう — さらに情報を提供すると回答が容易になるかどうか教えてください。