Cet article vous présentera la solution au problème d'échec de la vérification SN rencontré lors de l'utilisation de C# pour appeler l'API Baidu Maps. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Le problème de signature (vérification SN) rencontré lors de l'utilisation de C# pour appeler l'API du service Web Baidu Map, enregistrez-le ici, (Veuillez ignorer la vérification de la liste blanche IP)
1 . Obtenez d'abord ak et sk, ces deux choses peuvent être obtenues depuis la console
2 À cette adresse : algorithme de signature sn, qui fournit java, php, c#, python2.7 Code de référence
Dans le code de référence fourni par Baidu, il y a un problème avec la méthode de cryptage MD5 dans le code c# (Lorsque l'auteur a écrit l'essai, il y avait toujours un problème avec le code. J'espère que Baidu résoudra officiellement ce problème plus tard) Modifiez la méthode MD5 de Baidu, la signature sera correcte, et l'API sera appelée normalement, content ! ! Voici le code de signature completusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace IpService.Code { public class BaiduAKSNCaculater { private static string MD5(string password) { try { System.Security.Cryptography.HashAlgorithm hash = System.Security.Cryptography.MD5.Create(); byte[] hash_out = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password)); var md5_str=BitConverter.ToString(hash_out).Replace("-", ""); return md5_str.ToLower(); } catch { throw; } } private static string UrlEncode(string str) { str = System.Web.HttpUtility.UrlEncode(str); byte[] buf = Encoding.ASCII.GetBytes(str);//等同于Encoding.ASCII.GetBytes(str) for (int i = 0; i < buf.Length; i++) if (buf[i] == '%') { if (buf[i + 1] >= 'a') buf[i + 1] -= 32; if (buf[i + 2] >= 'a') buf[i + 2] -= 32; i += 2; } return Encoding.ASCII.GetString(buf);//同上,等同于Encoding.ASCII.GetString(buf) } private static string HttpBuildQuery(IDictionary<string, string> querystring_arrays) { StringBuilder sb = new StringBuilder(); foreach (var item in querystring_arrays) { sb.Append(UrlEncode(item.Key)); sb.Append("="); sb.Append(UrlEncode(item.Value)); sb.Append("&"); } sb.Remove(sb.Length - 1, 1); return sb.ToString(); } public static string CaculateAKSN(string ak, string sk, string url, IDictionary<string, string> querystring_arrays) { var queryString = HttpBuildQuery(querystring_arrays); var str = UrlEncode(url + "?" + queryString + sk); return MD5(str); } } }
public static string GetIPAreas() { var ip = "你要查询的ip地址"; var ak = "从百度控制台获取到应用AK"; var sk = "从百度控制台获取到签名SK"; var uri = "http://api.map.baidu.com"; var path = "/location/ip"; var param = new Dictionary<string, string>(); param.Add("ip", ip); param.Add("ak", ak); //注意:签名的url参数,并非完整地址 var sn = BaiduAKSNCaculater.CaculateAKSN(ak, sk, path, param); var url = string.Format("{0}{1}?ip={2}&ak={3}&sn={4}", uri, path, ip, ak, sn); var str = Code.HttpService.Get(url); return str; }
Tutoriel vidéo C# !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!