title: Twitter Application Only Authentication PHP OAuth error
body: <p><strong>Please Note</strong></p>
  
  <p>A full implementation of a working Twitter Application Only Authentication Oauth PHP library can now be found at the the following github link: <a href="http://jonhurlock.github.io/Twitter-Application-Only-Authentication-OAuth-PHP/" rel="nofollow">Twitter Application Only Authentication OAuth Php</a></p>
  
  <hr>
  
  <p>I'm trying to get my application to authenticate via Twitter's application only authentication. See documentation at the following URL:</p>
  
  <p><a href="https://dev.twitter.com/docs/auth/application-only-auth" rel="nofollow">Twitter Developer Documentation fro Application-only authentication</a></p>
  
  <p>I get to step 2 and request a bearer token using the code pasted below. I receive a response that looks like the following:</p>
  
  <pre><code>HTTP/1.1 200 OK 
  Date: Tue, 19 Mar 2013 15:13:03 GMT 
  Status: 200 OK 
  X-Frame-Options: DENY 
  ETag: "6b7ec13d0ef1e9d8e0b39bec5266ba7b" 
  X-Runtime: 0.06008 
  Pragma: no-cache 
  Last-Modified: Tue, 19 Mar 2013 15:13:03 GMT 
  Content-Type: application/json; charset=utf-8 
  X-Transaction: 55809f2187d74c8e 
  X-MID: 4503f89925628df071cb1d27c3e6953709234b1b 
  Expires: Tue, 31 Mar 1981 05:00:00 GMT 
  Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 
  Set-Cookie: k=10.37.190.122.1363705983314067; path=/; expires=Tue, 26-Mar-13 15:13:03 GMT; domain=.twitter.com 
  Set-Cookie: _twitter_sess=BAh7CSIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo%250ASGFzaHsABjoKQHVzZWR7ADoMY3NyZl9pZCIlZTI5MjJmNDI5ODY4MzM0NjAz%250AMzkwZTE2NDY5MzdiNGM6D2NyZWF0ZWRfYXRsKwhV8TWDPQE6B2lkIiU2NzEy%250AZjgzOTNjYjc4NjNhYzgwMjU2Mjc1Yzc0ZDYyMw%253D%253D--22b3f64a757c1f9f3c3ae8df9ee434848c43eee8; domain=.twitter.com; path=/; HttpOnly 
  Vary: Accept-Encoding 
  Content-Encoding: gzip 
  Content-Length: 138 
  Server: tfe 
  Set-Cookie: guest_id=v1%3A136370598331525689; Domain=.twitter.com; Path=/; Expires=Thu, 19-Mar-2015 15:13:03 UTC
  
  ‹«V*ÉÏNÍx‹/©,HU²RJJM,J-RÒQJLNN-.ŽKrÅ±‚|sg(«¢Ê(Ô5*ÝÕÃÂGÕÈ­ÌÃxßÂ²(ÐÄÙ(Í4ØÍÔDÕØ¥2+È³Ô Ô¨Ê7«À«$,+ÛÃ"ß35
  </code></pre>
  
  <p>As you can see the content returned does nto seem to return a json string as described in the documentation</p>
  
  <pre><code>HTTP/1.1 200 OK
  Status: 200 OK
  Content-Type: application/json; charset=utf-8
  ...
  Content-Encoding: gzip
  Content-Length: 140
  
  {"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
  </code></pre>
  
  <p>As we can see</p>
  
  <pre><code>‹«V*ÉÏNÍx‹/©,HU²RJJM,J-RÒQJLNN-.ŽKrÅ±‚|sg(«¢Ê(Ô5*ÝÕÃÂGÕÈ­ÌÃxßÂ²(ÐÄÙ(Í4ØÍÔDÕØ¥2+È³Ô Ô¨Ê7«À«$,+ÛÃ"ß35
  </code></pre>
  
  <p>is not equal to</p>
  
  <pre><code>{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
  </code></pre>
  
  <p>I was wondering if this could be a possible encoding error or if I am fundamentally doing something wrong with the cURL.</p>
  
  <p>My code is pasted below, any help would be appreciated:</p>
  
  <p>Jon</p>
  
  <pre><code>&lt;?php
  // from https://dev.twitter.com/docs/auth/application-only-auth
  $consumer_key = 'myconsumerkey';
  $consumer_secret = 'myconsumersecret';
  
  // step 1
    // step 1.1 - url encode the consumer_key and consumer_secret in accordance with RFC 1738
      $encoded_consumer_key = urlencode($consumer_key);
      $encoded_consumer_secret = urlencode($consumer_secret);
      // step 1.2 - concatinate encoded consumer, a colon character and the encoded consumer secr    et
  $bearer_token = $encoded_consumer_key.':'.$encoded_consumer_secret;
      // step 1.3 - base64-encode bearer token
      $base64_encoded_bearer_token = base64_encode($bearer_token);
  // step 2
        $url = "https://api.twitter.com/oauth2/token"; // url to send data to for authentication
          $headers = array( 
              "POST /oauth2/token HTTP/1.1", 
              "Host: api.twitter.com", 
              "User-Agent: my Twitter App v.1",
              //"Authorization: Basic ".$base64_encoded_bearer_token."",
              "Authorization: Basic ".$base64_encoded_bearer_token."",
              "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", 
              "Content-Length: 29",
              "Accept-Encoding: gzip"
          ); 
  
  $ch = curl_init();  // setup a curl
  curl_setopt($ch, CURLOPT_URL,$url);  // set url to send to
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // set custom headers
  curl_setopt($ch, CURLOPT_POST, 1); // send as post
  curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials"); // post body/fields to be sent
  $header = curl_setopt($ch, CURLOPT_HEADER, 1); // send custom headers
  //$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  $result = curl_exec($ch); // run the curl
  curl_close($ch);  // stop curling
  ?&gt;
  </code></pre>