C#百度地图开放平台211sn校验失败解决方法

这篇具有很好参考价值的文章主要介绍了C#百度地图开放平台211sn校验失败解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人认为百度地图开放平台确实很好用但就是C#的SN校验会出现以下几个问题

一、官方的示例代码说的不清不楚

获取SN函数的Uri应该使用不带域名的Uri

比如:最终请求地址为https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&ak=123456&sn=654321
AKSNCaculater.CaculateAKSN中的uri参数应该使用https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&ak=123456&sn=654321,而不可以是https://aspi.map.baidu.com/location/ip?coor=gcj02&ip=119.126.10.15&ak=123456&sn=654321

获取SN的时候参数的顺序是怎么样的,发送请求的时候参数的顺序就必须是怎么样

比如:获取SN的时候参数顺序是ip=119.126.10.15&coor=gcj02&ak=123456,那么最终请求地址就应该是https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&ak=123456&sn=654321,而不可以是https://aspi.map.baidu.com/location/ip?coor=gcj02&ip=119.126.10.15&ak=123456&sn=654321

无论如何SN必须在最终请求地址的最后!

比如以上情况下:https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&sn=654321&ak=123456就是一个错误的地址

二、官方MD5加密是错的!

这一个真是把我害惨了,折腾了半天终于发现正确代码(我也是copy别人的,但不管怎么说,官方的MD5加密代码确实是错的)

正确的加密过程如下

public static string MD52(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;
            }
        }

  完整类如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SATPlatform
{
 
    public class AKSNCaculater
    {
        public static string MD52(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;
            }
        }
 
        public static string MD5(string password)
        {
            byte[] textBytes = System.Text.Encoding.UTF8.GetBytes(password);
            try
            {
                System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;
                cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();
                byte[] hash = cryptHandler.ComputeHash(textBytes);
                string ret = "";
                foreach (byte a in hash)
                {
                    ret += a.ToString("x");
                }
                return ret;
            }
            catch
            {
                throw;
            }
        }
 
        public 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)
        }
 
        public 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 MD52(str);
        }
    }
}

  



以上就是我被坑的经历,希望对其他人有用~~~

最后再附带上我的请求代码

        /// <summary>
        /// 返回指定IP的位置对应的百度城市代码(利用百度地图API
        /// </summary>
        /// <param name="IP">需要查询的IP地址</param>
        /// <returns></returns>
        public string GetPlace(string IP)
        {
            DataTable BasicIn = Reader("SELECT Th_MapAK , Th_MapSK FROM S_Inf");
            Dictionary<string, string> P = new Dictionary<string, string>()
            {
                {"ip",IP },
                {"coor","gcj02" },
                {"ak",BasicIn.Rows[0]["Th_MapAK"].ToString() }
                //{"address","百度大厦" },
                //{"output","json" },
                //{"ak","yourak" }
            };
            string GetSN = AKSNCaculater.CaculateAKSN(BasicIn.Rows[0]["Th_MapAK"].ToString(), BasicIn.Rows[0]["Th_MapSK"].ToString(), "/location/ip", P);
            //string GetSN = AKSNCaculater.CaculateAKSN("yourak", "yoursk", "/geocoder/v2/", P);
            HttpWebRequest NewRequest = (HttpWebRequest)WebRequest.Create("https://api.map.baidu.com/location/ip?" + AKSNCaculater.HttpBuildQuery(P) + "&sn=" + GetSN);
            NewRequest.Headers.Add("charset", "utf-8");
            NewRequest.Method = "GET";
            NewRequest.ContentType = "application/json";
            NewRequest.UserAgent = "Windows KeHuDuan";
            NewRequest.Timeout = 5000;//设置超时时间
            HttpWebResponse Response = (HttpWebResponse)NewRequest.GetResponse();
            Stream ResponseStream = Response.GetResponseStream();
            StreamReader ResponseStreamReader = new StreamReader(ResponseStream);
            string Res = ResponseStreamReader.ReadToEnd();
            ResponseStreamReader.Close();
            ResponseStream.Close();
            JObject ResJ = new JObject();
            try
            { ResJ = JObject.Parse(Res); }
            catch (Exception)
            { GiveErr(ErrCode.ThirdPartyError); }
            if (ResJ["status"].ToString() != "0")
                GiveErr(ErrCode.ThirdPartyError);
            return ResJ["content"]["address_detail"]["city_code"].ToString();
        }

  文章来源地址https://www.toymoban.com/news/detail-519251.html

到了这里,关于C#百度地图开放平台211sn校验失败解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【NLP教程】用python调用百度AI开放平台进行情感倾向分析

    目录 一、背景 二、操作步骤 2.1 创建应用 2.2 获取token 2.3 情感倾向分析 三、其他情感分析 四、讲解视频 Hi,大家!我是 @马哥python说 ,一名10年程序猿。 今天我来演示一下:通过百度AI开放平台,利用python调用百度接口进行中文情感倾向分析,并得出情感极性分为积极、消

    2023年04月25日
    浏览(49)
  • Python编程实现百度AI开放平台的接口对接方法,详解和实践指南

    Python编程实现百度AI开放平台的接口对接方法,详解和实践指南 引言 百度AI开放平台提供了丰富的人工智能接口,包括语音识别、图像识别、自然语言处理等功能。本文将通过Python编程,详解如何对接百度AI开放平台的接口,并提供实际代码示例。 准备工作 在开始之前,我们

    2024年02月13日
    浏览(43)
  • 快速调用百度AI开放平台的API,以OCR通用文字识别为例(封装函数进行连续调用)

    🔥博客主页:是dream 🚀系列专栏: 深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发 💘每日语录:眼里有不朽的光芒 心里有永恒的希望 。 🎉感谢大家点赞👍收藏⭐指正✍️         百度开放平台允许开发者访问和利用百度的各种服务

    2024年02月06日
    浏览(64)
  • 0基础学习VR全景平台篇 第99篇:百度地图如何上传全景图

    蛙色平台现已打通VR全景入驻百度地图全流程,百度全景分为免费版和付费版两种,其中付费支持配置作品音乐、场景漫游热点、联系电话、描述信息。 百度地图上传案例 免费版  付费版 一、百度地图上传流程 1、进入蛙色VR账号后台 (1)选择-第三方平台; (2)点击-百度

    2024年02月07日
    浏览(39)
  • 使用百度地图官方WEB API,提示 “ APP 服务被禁用“ 问题的解决方法

    项目上用了百度地图官方WEB API,打开界面时百度地图无法打开,出现弹窗: APP被您禁用啦。详情查看:http://lbsyun.baidu.com/apiconsole/key# 。 查看错误信息: \\\"status\\\":240,\\\"message\\\":\\\"APP 服务被禁用\\\" 在https://lbsyun.baidu.com/index.php?title=webapi/appendix中找到百度地图官方WEB API服务文档—附录

    2023年04月09日
    浏览(107)
  • 解决百度地图的父元素出现滚轮之后启用鼠标缩放模式之后出现偏移的现象

    最近在做项目的时候,有个功能是点击详情按钮的时候在一个弹框里展现出来列表的详情 因为详情弹框里面的数据有其他的表格数据,然后在弹框的下边使用百度地图展示后端发送过来的坐标点,然后把坐标点转换之后使用百度地图的方法制作覆盖物上去。这里边就出现了一

    2024年03月18日
    浏览(42)
  • 关于腾讯地图geolocation.getLocation 经常定位失败,定位时间过长的解决方法

    今天遇到个项目,腾讯地图定位出现问题,导致地图无法呈现出最近的目标  这是正常的效果,之前一直出现贵州等地点的信息,查看控制台的网络后,发现腾讯的定位失败,要么就是定位时间过长,要20S左右,但是换EDGE浏览器却能正常加载, 除了EDGE浏览器都会出现这个问

    2024年02月03日
    浏览(70)
  • 漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案

    漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案 漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关 漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标 漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的

    2024年01月19日
    浏览(65)
  • 关于微信小程序调用H5腾讯地图API获取定位信息提示失败问题--解决办法之一

    在跳转到H5页面加载腾讯地图API获取定位信息时,“真机调试”、“开发模式”都可以使用 web-view 组件访问我需要的路径。只有“体验版”、“线上版本”会出现这个错误提示。正常加载都是正常的,但是因为腾讯地图API在获取定位信息的同时,会在页面上内嵌一个隐藏的

    2024年04月26日
    浏览(57)
  • 如何申请百度地图开发者AK和基本使用,并解决Uncaught ReferenceError: BMapGL is not defined的错误

    今天在学习 amis 框架中的地理位置( LocationPicker )的组件,如下图所示: 关于 amis 的更多了解,可以参考博文:百度低代码amis框架的讲解 截图中注意的是, ak 参数只能在 amis 官网示例中使用,让我们前往百度地图开放平台申请自己的 ak 。 百度地图开放平台官网地址:https:

    2024年02月01日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包