Thanks for confirming Bassem, your code worked on my machine. It does seem 
awkward that it requires the URI() before the url, especially given that 
some of the examples on the Github page work without using that.

On Wednesday, February 5, 2014 4:11:11 PM UTC-5, Bassem Youssef wrote:
>
> Hi Randy,
> The following works for me:
> where $enc is the encoded creds as you had above.
>
> post(URI("https://api.twitter.com/oauth2/token";),"grant_type=client_credentials",{"Authorization"
>  
> => "Basic $enc","Content-Type" => 
> "application/x-www-form-urlencoded;charset=UTF-8"})
>
> Note the URI() before the url. We should fix that.
>
> regards,
> Bassem
>
>
> On Wed, Feb 5, 2014 at 9:18 AM, Randy Zwitch 
> <randy....@fuqua.duke.edu<javascript:>
> > wrote:
>
>> I'm trying to work through the application-only authentication for 
>> Twitter (https://dev.twitter.com/docs/auth/application-only-auth), but I 
>> can't seem to get the POST request right at step 2.
>>
>> I'm fairly certain I have the credentials portion right, but for whatever 
>> reason I can't get Twitter to recognize the body of my request. Here's what 
>> I've tried:
>>
>> using Codecs, HttpCommon, Requests
>>
>> consumer_key = "6nOtpXmf4bYuu3...";
>> consumer_secret = "sES5Zlj096St0O65VX...";
>>
>> #Function to create authentication header
>> function encodecredentials(consumer_key::String, consumer_secret::String)
>>     #URI encode keys for future-proofing, per Twitter docs
>>     bearer_token_credentials = 
>> "$(encodeURI(consumer_key)):$(encodeURI(consumer_secret))"
>>     return(base64(bearer_token_credentials))
>> end
>>
>> #1. Try POST request by itself - Expect an error
>>
>> response = post("https://api.twitter.com/oauth2/token";)
>> println(response.data)
>>
>> {"errors":[{"label":"authenticity_token_error","code":99,"message":"Unable 
>> to verify your credentials"}]}
>>
>> #2. Add in authentication
>> #Change in error message suggests Twitter okay with my Authorization 
>> credentials
>>
>> response = post("https://api.twitter.com/oauth2/token";;
>>                 headers = {"Authorization" => "Basic 
>> $(encodecredentials(consumer_key, consumer_secret))", 
>>                            "Content-Type" => 
>> "application/x-www-form-urlencoded;charset=UTF-8"},
>>                 data = "grant_type=client_credentials")
>> println(response.data)
>>
>> {"errors":[{"label":"forbidden_missing_parameter","code":170,"message":"Missing
>>  required parameter: grant_type"}]}
>>
>>
>> #3. Try authentication with data as Dict instead of string
>>
>> #Get same error message
>>
>>
>> response = post("https://api.twitter.com/oauth2/token";;
>>                 headers = {"Authorization" => "Basic 
>> $(encodecredentials(consumer_key, consumer_secret))", 
>>                            "Content-Type" => 
>> "application/x-www-form-urlencoded;charset=UTF-8"},
>>                 data = {"grant_type" => "client_credentials"})
>> println(response.data)
>>
>>
>> {"errors":[{"label":"forbidden_missing_parameter","code":170,"message":"Missing
>>  required parameter: grant_type"}]}
>>
>>
>> So regardless of how I specify the body parameter, Twitter doesn't want 
>> to recognize what I'm doing. Is there a different way I'm supposed to add 
>> data to a POST request?
>>
>
>

Reply via email to