Demander l’access_token Instagram

J’ai le problème suivant:

J’essaie d’implémenter Instagram sur mon site web. Cependant, je suis coincé sur l’étape où j’ai besoin d’obtenir le jeton d’access. La documentation de l’API indique que je dois le demander comme ceci:

curl \-F 'client_id=CLIENT-ID' \ -F 'client_secret=CLIENT-SECRET' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=YOUR-REDIRECT-URI' \ -F 'code=CODE' \https://api.instagram.com/oauth/access_token 

J’utilise ASP.NET et j’ai donc trouvé cet équivalent OAuth 2.0 .NET avec Instagram API :

 NameValueCollection parameters = new NameValueCollection(); parameters.Add("client_id", "ssdfsdfsdfsdfsdf"); parameters.Add("client_secret", "sdsdfdsfsdfsdfsdfsdfsdf"); parameters.Add("grant_type", "authorization_code"); parameters.Add("redirect_uri", "http://localhost:2422/LoginsGuests/GetLoginPage"); parameters.Add("code", code); WebClient client = new WebClient(); var result = client.UploadValues("https://api.instagram.com/oauth/access_token", parameters); var response = System.Text.Encoding.Default.GetSsortingng(result); 

Cependant, je continue à avoir: System.Net.WebException: le serveur distant a renvoyé une erreur: (400) requête incorrecte.

Qu’est-ce que je fais mal?

Presque là, l’API d’Instagram attend un POST et non un GET.

Ajoutez le paramètre “POST”.

var result = client.UploadValues ​​(” https://api.instagram.com/oauth/access_token “, “POST”, parameters);

Vérifiez également les parameters Instagram -> URL de redirection.

Ensuite, cela peut aider à ne pas oublier d’append une référence à Newtonsoft.Json. Est dans la version .Net 4.5.1:

 using System; using System.Collections.Specialized; using System.Net; using System.Text; namespace Instagram { public class InstagramClient { public InstagramClient(ssortingng code) { GetToken(code); } private void GetToken(ssortingng code) { using (var wb = new WebClient()) { var parameters = new NameValueCollection { {"client_id", "ClientId"}, {"client_secret", "ClientSecret"}, {"grant_type", "authorization_code"}, {"redirect_uri", "RedirectUri"}, {"code", code} }; var response = wb.UploadValues("https://api.instagram.com/oauth/access_token", "POST", parameters); ssortingng json = Encoding.ASCII.GetSsortingng(response); try { var OauthResponse = (InstagramOAuthResponse) Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(InstagramOAuthResponse)); } catch (Exception ex) { //handle ex if needed. } } } public class InstagramOAuthResponse { public ssortingng access_token { get; set; } public User user { get; set; } } public class User : System.Security.Principal.IIdentity { public ssortingng username { get; set; } public ssortingng website { get; set; } public ssortingng profile_picture { get; set; } public ssortingng full_name { get; set; } public ssortingng bio { get; set; } public ssortingng id { get; set; } public ssortingng OAuthToken { get; set; } public ssortingng AuthenticationType { get { return "Instagram"; } } public bool IsAuthenticated { get { return !ssortingng.IsNullOrEmpty(id); } } public ssortingng Name { get { return Ssortingng.IsNullOrEmpty(full_name) ? "unknown" : full_name; } } } } } 

Si vous préférez la classe HttpWebRequest:

 var request = (HttpWebRequest)WebRequest.Create("https://api.instagram.com/oauth/access_token/"); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; var requestDetails = "client_id=" + AppConfig.InstagramClientId; requestDetails += "&client_secret=" + AppConfig.InstagramClientSecret; requestDetails += "&grant_type=authorization_code"; requestDetails += "&redirect_uri=" + redirectUrl; requestDetails += "&code=" + exchangeCode; byte[] bytes = Encoding.ASCII.GetBytes(requestDetails); request.ContentLength = bytes.Length; using (Stream outputStream = request.GetRequestStream()) { outputStream.Write(bytes, 0, bytes.Length); } var response = request.GetResponse(); var code = ((HttpWebResponse)response).StatusCode; if (code == HttpStatusCode.OK) { using (var streamReader = new StreamReader(response.GetResponseStream())) { var jsonSsortingng = streamReader.ReadToEnd(); var accessToken = ParseAccessToken(jsonSsortingng); return accessToken; } }