3

Google here で説明されているように、更新トークンを使用して新しいアクセス トークンを取得しようとしています。Google は、HTTP リクエストを行う必要があると言っています。やり方が分からなかったので、ここからやり方を調べてみました。ただし、エラーが発生するため、投稿を間違っているに違いありませんinvalid_request

以下は私の関連コードです:

h = Http()
post_data = {'POST': '/o/oauth2/token HTTP/1.1', 
             'HOST:': 'accounts.google.com', 
             'Content-Type:': 'application/x-www-form-urlencoded',
             'client_id':ClientID,
             'client_secret':ClientSecret,
             'refresh_token':SavedRefreshToken,
             'grant_type':'refresh_token'}
resp, content = h.request("https://accounts.google.com/o/oauth2/token", 
                          "POST", 
                          urlencode(post_data))

そして、私が得る応答は次のとおりです。

{
  "error" : "invalid_request"
}

ここで何が欠けていますか?

4

1 に答える 1

7

'Content-type'ヘッダーで送信する必要があるときに、本文で送信しているだけです。'POST': '/o/oauth2/token HTTP/1.1'さらに、あなたの体には必要ありません'HOST:': 'accounts.google.com'。これを試してください:

h = Http()
post_data = {'client_id':ClientID,
             'client_secret':ClientSecret,
             'refresh_token':SavedRefreshToken,
             'grant_type':'refresh_token'}

headers = {'Content-type': 'application/x-www-form-urlencoded'}

resp, content = h.request("https://accounts.google.com/o/oauth2/token", 
                          "POST", 
                          urlencode(post_data),
                          headers=headers)

print content

次のように出力されます。

{
  "access_token" : "ya29.AHBS6ZCtS8mBc_vEC9FFBkW2x3ipa7FLOs-Hi-3UhVkpacOm",
  "token_type" : "Bearer",
  "expires_in" : 3600
}
于 2013-04-10T01:46:24.733 に答える