如何从ip地址中查找国家
本文关键字:查找 国家 地址 ip | 更新日期: 2023-09-27 18:27:57
我正在使用此API查找用户所在的国家/地区。我可以在XML格式的网页上找到这个国家。在这里您可以看到XML文件示例。但问题是我无法在c#代码中读取这个XML。这是我的代码
string UserIP = Request.ServerVariables["REMOTE_ADDR"].ToString();
string ApiKey = "5d3d0cdbc95df34b9db4a7b4fb754e738bce4ac914ca8909ace8d3ece39cee3b";
string Url = "http://api.ipinfodb.com/v3/ip-country/?key=" + ApiKey + "&ip=" + UserIP;
XDocument xml = XDocument.Load(Url);
但这段代码在加载xml时返回以下异常。
System.Xml.XmlException:根级别的数据无效。第1行,位置1。
请描述读取此XML的确切方法。
我会说它不是一个XML,只是一个由;
:细分的字符串
通过给出一个不可能的IP地址,我们可以看到它是如此的复杂:
OK;;74.125.45.100;US;UNITED STATES
ERROR;Invalid IP address.;127.0.0.1.1;;
OK/ERROR
If ERROR, complete ERROR message
IP Address
Abbreviation of country
Country name
这个代码应该做:
string userIP = "127.0.0.1";
string apiKey = "5d3d0cdbc95df34b9db4a7b4fb754e738bce4ac914ca8909ace8d3ece39cee3b";
string url = "http://api.ipinfodb.com/v3/ip-country/?key=" + apiKey + "&ip=" + userIP;
WebRequest request = WebRequest.Create(url);
using (var response = (HttpWebResponse)request.GetResponse())
{
// We try to use the "correct" charset
Encoding encoding = response.CharacterSet != null ? Encoding.GetEncoding(response.CharacterSet) : null;
using (var sr = encoding != null ? new StreamReader(response.GetResponseStream(), encoding) :
new StreamReader(response.GetResponseStream(), true))
{
var response2 = sr.ReadToEnd();
var parts = response2.Split(';');
if (parts.Length != 5)
{
throw new Exception();
}
string okError = parts[0];
string message = parts[1];
string ip = parts[2];
string code = parts[3];
string country = parts[4];
}
}
以下是我要做的:
- 使用HTTP传输,查询网站并缓冲结果
- 将其转换为字符串
- 对其使用拆分算法以生成数组
- 检查数组的第0个元素是否等于"OK"
- 如果没有,请保释
- 如果是,请分别检查第三个和第四个元素中的国家代码和国家名称
来自IP位置XML API文档:API参数格式,required=false,default=raw,values=raw、XML、json。所以我对它进行了测试,string Url = "http://api.ipinfodb.com/v3/ip-country/?key=" + ApiKey + "&ip=" + UserIP + "&format=xml"
给出了一个可解析的xml结果。