1,到百度开发者中心申请key值既ak
应用类型为:for browser ,refer白名单为: *
using CodeTitans.JSon;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
/// <summary>
/// IP_locating 的摘要说明
/// </summary>
public class IP_locating
{
public IP_locating()
{
}
public static string IPLocate()
{
string postString = "ak=mHM6XBGGTyjlYsZPOHsexecf&ip=" + "121.25.163.84";// GetIP(); //这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来 ak即key值
byte[] postData = Encoding.UTF8.GetBytes(postString); //编码,尤其是汉字,事先要看下抓取网页的编码方式
string url = "http://api.map.baidu.com/location/ip"; //地址
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); //采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可
byte[] responseData = webClient.UploadData(url, "post", postData); //得到返回字符流
string srcString = Encoding.UTF8.GetString(responseData); //解码
//解析第一层json数据
JSonReader readerfirst = new JSonReader();
IJSonObject jsonfirst = readerfirst.ReadAsJSonObject(srcString);
//解析第二层json数据
JSonReader readersecond = new JSonReader();
IJSonObject jsonsecond = readersecond.ReadAsJSonObject(jsonfirst["content"].ToString());
//解析第三次json数据
JSonReader readerthird = new JSonReader();
IJSonObject jsonthird = readerthird.ReadAsJSonObject(jsonsecond["address_detail"].ToString());
string address = jsonthird["province"].ToString() + "," + jsonthird["city"].ToString().Replace("市","") ;
return address;
}
//获取本机的公网IP
private static string GetIP()
{
string tempip = "";
try
{
WebRequest wr = WebRequest.Create("http://www.ip138.com/ip2city.asp");
Stream s = wr.GetResponse().GetResponseStream();
StreamReader sr = new StreamReader(s, Encoding.Default);
string all = sr.ReadToEnd(); //读取网站的数据
int start = all.IndexOf("[") + 1;
int end = all.IndexOf("]", start);
tempip = all.Substring(start, end - start);
sr.Close();
s.Close();
}
catch
{
}
return tempip;
}
}