Google API - demande de jeton de Oauth2 renvoie “invalid_request”

Je suis en train de faire une application à l'aide de Google calendrier de l'API. Je suis en suivant les instructions ici. Je peux faire la demande pour obtenir le code d'autorisation, mais je n'arrive pas a la forme d'une demande valide pour obtenir un jeton d'accès. Je reçois la réponse {"error" : "invalid_request"}.
C'est le POST que je fais:

POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

code=4/vxQqw9JMYEnXvI8A_93OV7kBSg6h.8r2yJUkMc18dshQV0ieZDAraZNwsbwI&
client_id=[my client id]&
client_secret=[my client secret]&
redirect_uri=http://localhost:8080/auth&
grant_type=authorization_code

Ci-dessous est le résultat de l'appel de l'url via curl. Mon application est écrite en Node.js mais j'obtiens la même réponse de roulage comme je le fais par le biais de l'application. J'ai cherché et vu des gens avec des problèmes similaires, mais ne peut toujours pas comprendre ce que je fais mal.

curl -v -k --header "Content-Type: application/x-www-form-urlencoded" --data-urlencode "code=4/vxQqw9JMYEnXvI8A_93OV7kBSg6h.8r2yJUkMc18dshQV0ieZDAraZNwsbwI&client_id=[my client id]&client_secret=[my client secret]&redirect_uri=http://localhost:8080/auth&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token
* About to connect() to accounts.google.com port 443 (#0)
*   Trying 173.194.74.84... connected
* Connected to accounts.google.com (173.194.74.84) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using RC4-SHA
* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=accounts.google.com
*    start date: 2011-07-21 00:00:00 GMT
*    expire date: 2013-07-18 23:59:59 GMT
*    common name: accounts.google.com (matched)
*    issuer: C=ZA; O=Thawte Consulting (Pty) Ltd.; CN=Thawte SGC CA
*    SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> POST /o/oauth2/token HTTP/1.1
> User-Agent: curl/7.21.3 (i386-apple-darwin8.11.1) libcurl/7.21.3 OpenSSL/0.9.7l zlib/1.2.5 libidn/1.17
> Host: accounts.google.com
> Accept: */*
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 180
> 
< HTTP/1.1 400 Bad Request
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: Fri, 01 Jan 1990 00:00:00 GMT
< Date: Tue, 29 May 2012 12:43:49 GMT
< Content-Type: application/json
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< Server: GSE
< Transfer-Encoding: chunked
< 
{
  "error" : "invalid_request"
* Connection #0 to host accounts.google.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
}
Pouvez-vous réessayer en utilisant: -F 'code=<code>' -F 'client_id=<id>' -F 'client_secret=<secret>' .... ? Curl URLEncode pour vous, vous n'avez pas besoin de le faire.
Qui a fait le tour, merci! Utilisez-F dans la demande curl au moins m'a fait une réponse valide qui m'a permis de déboguer mon code d'application.
Le problème a été vous avez été Encodage déjà URLEncoded chaîne. Heureux, j'ai pu aider 🙂
Avez-vous le comprendre? Je vais avoir le même problème.
Désolé pour le retard. Comme je l'ai mentionné dans le commentaire ci-dessus, à l'aide de l'option-F comme Thrustmaster suggéré m'a permis de plus utilement à déboguer le problème. Les détails de ce qui n'allait pas été vraiment très spécifique à ma demande, et ne sont probablement pas trop utile.

OriginalL'auteur stymo | 2012-05-29