zoukankan      html  css  js  c++  java
  • (转)根据IP返回对应的位置信息

    其实就是使用了百度的IP库的功能接口,然后处理下就行了,效果图如下:

    准备工作:

    1.注册成为开度开发者,创建应用获得百度API调用的AK秘钥,百度开发中心地址:http://developer.baidu.com/

    2.API 地址: http://developer.baidu.com/map/index.php?title=webapi/ip-api#.E4.BD.BF.E7.94.A8.E6.96.B9.E6.B3.95

    3.准备开发咯,步骤如下:

    (1)获取客户端IP

    复制代码
            /// <summary>获取客户端IP地址(无视代理)</summary>
            /// <returns>若失败则返回回送地址</returns>
            public static string GetHostAddress()
            {
                string userHostAddress = HttpContext.Current.Request.UserHostAddress;
    
                if (string.IsNullOrEmpty(userHostAddress))
                {
                    userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
    
                //最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
                if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
                {
                    return userHostAddress;
                }
                return "127.0.0.1";
            }
    
            /// <summary>
            /// 检查IP地址格式
            /// </summary>
            /// <param name="ip"></param>
            /// <returns></returns>
            public static bool IsIP(string ip)
            {
                return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)$");
            
    复制代码

    (2)获取编码服务地址

    复制代码
            private const string THE_KEY = "***************"; //你的AK密钥
            /// <summary>返回UTF-8编码服务地址</summary>
            /// <returns>服务地址</returns>
            public string GetPostUrl(string theIP)
            {
                string postUrl = "http://api.map.baidu.com/location/ip?ak=" + THE_KEY + "&ip=" + theIP + "&coor=bd09ll";
                return postUrl;
            }
    复制代码

    (3)通过服务地址,得到地址解析结果

    复制代码
            /// <summary> 返回结果(地址解析的结果) </summary>
            public static string GetInfoByUrl(string url)
            {
                //调用时只需要把拼成的URL传给该函数即可。判断返回值即可
                string strRet = null;
    
                if (url == null || url.Trim().ToString() == "")
                {
                    return strRet;
                }
                string targeturl = url.Trim().ToString();
                try
                {
                    HttpWebRequest hr = (HttpWebRequest)WebRequest.Create(targeturl);
                    hr.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
                    hr.Method = "GET";
                    hr.Timeout = 30 * 60 * 1000;
                    WebResponse hs = hr.GetResponse();
                    Stream sr = hs.GetResponseStream();
                    StreamReader ser = new StreamReader(sr, Encoding.Default);
                    strRet = ser.ReadToEnd();
                }
                catch (Exception ex)
                {
                    strRet = null;
                }
                return strRet;
            }
    复制代码

    (4)最后简单的调用上面的方法,然后转换下字符串中转义字符

                    string theIP = YMethod.GetHostAddress();
                    string msg = YMethod.GetInfoByUrl(GetPostUrl(theIP));
                    msg = System.Text.RegularExpressions.Regex.Unescape(msg);
                    Response.Write(msg);
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/zix1314/p/5084114.html
Copyright © 2011-2022 走看看