在运用c#挪用百度舆图Web效劳api碰到的署名(sn校验)题目,在此纪录一下,(ip白名单校验的请疏忽)
1.起首猎取ak与sk,这个两个东西能够从掌握台中猎取到
2.在这个地点:sn署名算法,内里供应了java,php,c#,python2.7的参考代码
在百度供应的参考代码中,个中c#的代码中MD5加密要领是有题目的,(在笔者写漫笔时,代码照样有题目的,以后愿望百度官方修复此题目)
把百度的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#之处理百度舆图api APP SN校验失利题目(代码实例)的细致内容,更多请关注ki4网别的相干文章!