Get media token using HttpClient

I am trying to get a carrier token:

public override async Task<string> Post(string path, HttpContent content) { var encodedConsumerKey = System.Uri.EscapeDataString("1111111111111"); var encodedConsumerKeySecret = System.Uri.EscapeDataString("2222222222222"); var encodedPair = Base64Encode(String.Format("{0}:{1}", encodedConsumerKey, encodedConsumerKeySecret)); HttpRequestMessage request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.twitter.com/oauth2/token"), Content = new StringContent("grant_type=client_credentials") }; request.Headers.TryAddWithoutValidation("Authorization", String.Format("BASIC {0}", encodedPair)); request.Headers.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded"); var result = await HttpClient.SendAsync(request); return result.Content.ReadAsStringAsync().Result; } private static string Base64Encode(string plainText) { var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); return System.Convert.ToBase64String(plainTextBytes); } 

This results in a 403 Forbidden error. Any ideas would be good.

+5
source share
1 answer

I was able to get this job. I changed a couple of things in the code above. First install ContentType

 requestToken.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded") {CharSet = "UTF-8"}; 

The second is a very small detail that I missed by omitting the Basic line in the Authorization header.

Here's the full method in case someone needs it:

 public async Task<string> GetAPI(string apiPath) { var baseUri = new Uri("https://api.twitter.com/"); var encodedConsumerKey = HttpUtility.UrlEncode("111111111111"); var encodedConsumerKeySecret = HttpUtility.UrlEncode("222222222222"); var encodedPair = Base64Encode(String.Format("{0}:{1}", encodedConsumerKey, encodedConsumerKeySecret)); var requestToken = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri(baseUri, "oauth2/token"), Content = new StringContent("grant_type=client_credentials") }; requestToken.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded") { CharSet = "UTF-8" }; requestToken.Headers.TryAddWithoutValidation("Authorization", String.Format("Basic {0}", encodedPair)); var bearerResult = await HttpClient.SendAsync(requestToken); var bearerData = await bearerResult.Content.ReadAsStringAsync(); var bearerToken = JObject.Parse(bearerData)["access_token"].ToString(); var requestData = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri(baseUri, apiPath), }; requestData.Headers.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var results = await HttpClient.SendAsync(requestData); return await results.Content.ReadAsStringAsync(); } 
+8
source

Source: https://habr.com/ru/post/1232858/


All Articles