首页 > 代码库 > C# 根据IP地址获取城市
C# 根据IP地址获取城市
1 using System; 2 using System.IO; 3 using System.Net; 4 using System.Text; 5 using System.Web.Script.Serialization; 6 7 namespace IpUtils 8 { 9 public class IpDetail10 {11 public String Ret { get; set; }12 13 public String Start { get; set; }14 15 public String End { get; set; }16 17 public String Country { get; set; }18 19 public String Province { get; set; }20 21 public String City { get; set; }22 23 public String District { get; set; }24 25 public String Isp { get; set; }26 27 public String Type { get; set; }28 29 public String Desc { get; set; }30 }31 32 public class IpHelper33 {34 /// <summary>35 /// 获取IP地址的详细信息,调用的借口为36 /// http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip={ip}37 /// </summary>38 /// <param name="ipAddress">请求分析得IP地址</param>39 /// <param name="sourceEncoding">服务器返回的编码类型</param>40 /// <returns>IpUtils.IpDetail</returns>41 public static IpDetail Get(String ipAddress,Encoding sourceEncoding)42 {43 String ip = string.Empty;44 if(sourceEncoding==null)45 sourceEncoding = Encoding.UTF8;46 using (var receiveStream = WebRequest.Create("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip="+ipAddress).GetResponse().GetResponseStream())47 {48 using (var sr = new StreamReader(receiveStream, sourceEncoding))49 {50 var readbuffer = new char[256];51 int n = sr.Read(readbuffer, 0, readbuffer.Length);52 int realLen = 0;53 while (n > 0)54 {55 realLen = n;56 n = sr.Read(readbuffer, 0, readbuffer.Length);57 }58 ip = sourceEncoding.GetString(sourceEncoding.GetBytes(readbuffer, 0, realLen));59 }60 }61 return !string.IsNullOrEmpty(ip)?new JavaScriptSerializer().Deserialize<IpDetail>(ip):null;62 }63 }64 65 public class EncodingHelper66 {67 public static String GetString(Encoding source, Encoding dest, String soureStr)68 {69 return dest.GetString(Encoding.Convert(source, dest, source.GetBytes(soureStr)));70 }71 72 public static String GetString(Encoding source, Encoding dest, Char[] soureCharArr, int offset, int len)73 {74 return dest.GetString(Encoding.Convert(source, dest, source.GetBytes(soureCharArr, offset, len)));75 }76 }77 }
.NET技术交流群 199281001 .欢迎加入。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。