이 글에서는 C#을 사용하여 Baidu Maps API를 호출할 때 발생하는 SN 인증 실패 문제에 대한 해결 방법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
C#을 사용하여 Baidu Map Web Service API를 호출할 때 발생하는 서명(sn 확인) 문제를 여기에 기록하세요. (IP 화이트리스트 확인을 무시하세요)
1 먼저 ak와 sk를 얻으세요. 콘솔에서 획득
2. 이 주소에는 java, php, c#, python2.7에 대한 참조 코드를 제공하는 sn 서명 알고리즘
Baidu에서 제공하는 참조 코드에는 C#에 대한 코드가 제공됩니다. MD5 암호화 방식 문제 (저자가 에세이를 작성할 당시에도 코드에 문제가 있었습니다. 나중에 Baidu에서 이 문제를 정식으로 수정했으면 좋겠습니다.)
Baidu의 MD5 방식을 수정하면 서명이 정확해집니다. , API는 정상적으로 호출됩니다. 행복합니다! !
여기에 완전한 서명 코드가 있습니다
using 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; }
마지막에 작성되었습니다. 바이두 관계자들이 가능한 한 빨리 예시의 코드를 수정하여 다른 사람들도 사용하기 편리하도록 해주기를 바랍니다.
요약: 위 내용은 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 더 많은 관련 튜토리얼을 보려면 C# 비디오 튜토리얼을 방문하세요!
위 내용은 C#은 Baidu Map API APP SN 확인 실패 문제를 해결합니다(코드 예).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!