title: 400 Bad Request when sending http post request to get token from auth code?
body: <p>I am trying to access accounts.google.com to get token from authorization code received using HTTP post request.</p>
  
  <pre><code>    var searchurl = "https://accounts.google.com/o/oauth2/token";
  
      $.ajax({
          dataType: "json",
          url:searchurl,
          data: {code:auth_code, client_id:'client_id', client_secret:'secret', redirect_uri:'http%3A%2F%2Flocalhost:8085%2FGmailIntegration%2FgetAuthResponse1.jsp', grant_type:'authorization_code'},
          type:"Post",
          contentType:"application/x-www-form-urlencoded",
          success:function(data) {
              alert(data);
          },
          error: function(jqXHR, exception) {
              console.log(jqXHR);
  
          }
      });
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>"NetworkError: 400 Bad Request - https://accounts.google.com/o/oauth2/token?
   code=4/PlKII3f0vsPUhl1QNIUXkiIhlfGA.sq9lFf-oCiIcXE-sT2ZLcbRFnpEphQI&amp;client_id={clientid}   
   &amp;client_secret={secret}&amp;redirect_uri=https://oauth2-login-
   demo.appspot.com/code&amp;grant_type=authorization_code"
  </code></pre>
  
  <p>Request:</p>
  
  <pre><code>Response Headers
  Alternate-Protocol  443:quic
  Cache-Control   no-cache, no-store, max-age=0, must-revalidate
  Content-Encoding    gzip
  Content-Type    application/json
  Date    Tue, 26 Nov 2013 14:20:56 GMT
  Expires Fri, 01 Jan 1990 00:00:00 GMT
  Pragma  no-cache
  Server  GSE
  X-Firefox-Spdy  3
  X-Frame-Options SAMEORIGIN
  X-XSS-Protection    1; mode=block
  x-content-type-options  nosniff
  
  Request Header:
  Accept  application/json, text/javascript, */*; q=0.01
  Accept-Encoding gzip, deflate
  Accept-Language en-US,en;q=0.5
  Cache-Control   no-cache
  Connection  keep-alive
  Content-Length  0
  Content-Type    application/x-www-form-urlencoded
  Host    accounts.google.com
  Origin  http://localhost:8085
  Pragma  no-cache
  </code></pre>
  
  <p>here is the document which i am using:
  After the web server receives the authorization code, it may exchange the authorization code for an access token and a refresh token. This request is an HTTPs post, and includes the following parameters:</p>
  
  <p>Field   Description
  code    The authorization code returned from the initial request
  client_id   The client_id obtained during application registration
  client_secret   The client secret obtained during application registration
  redirect_uri    The URI registered with the application
  grant_type  As defined in the OAuth 2.0 specification, this field must contain a value of authorization_code
  The actual request might look like:</p>
  
  <pre><code>POST /o/oauth2/token HTTP/1.1
  Host: accounts.google.com
  Content-Type: application/x-www-form-urlencoded
  
  code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&amp;
  client_id=8819981768.apps.googleusercontent.com&amp;
  client_secret={client_secret}&amp;
  redirect_uri=https://oauth2-login-demo.appspot.com/code&amp;
  grant_type=authorization_code
  </code></pre>
  
  <p>A successful response to this request contains the following fields:</p>
  
  <pre><code>Field   Description
  access_token    The token that can be sent to a Google API
  refresh_token   A token that may be used to obtain a new access token. Refresh tokens are valid until the user revokes access. This field is only present if access_type=offline is included in the authorization code request.
  expires_in  The remaining lifetime on the access token
  token_type  Indicates the type of token returned. At this time, this field will always have the value Bearer
  </code></pre>