C# 如何从ip地址查找国家/地区?
我正在使用查找用户的国家/地区。我可以在网页上找到XML格式的国家。您可以看到XML文件示例。但问题是我无法在c代码中读取此XML。这是我的密码C# 如何从ip地址查找国家/地区?,c#,C#,我正在使用查找用户的国家/地区。我可以在网页上找到XML格式的国家。您可以看到XML文件示例。但问题是我无法在c代码中读取此XML。这是我的密码 string UserIP = Request.ServerVariables["REMOTE_ADDR"].ToString(); string ApiKey = "5d3d0cdbc95df34b9db4a7b4fb754e738bce4ac914ca8909ace8d3ece39cee3b"; string Url = "http://api.i
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的确切方法。以下是我要做的:
- 使用HTTP传输,查询站点并缓冲结果
- 将其转换为字符串
- 对其使用拆分算法以生成数组
- 检查数组的第0个元素是否等于“OK”
- 如果没有,就退出
- 如果是,请分别检查国家代码和国家名称的第三和第四个元素
- 使用HTTP传输,查询站点并缓冲结果
- 将其转换为字符串
- 对其使用拆分算法以生成数组
- 检查数组的第0个元素是否等于“OK”
- 如果没有,就退出
- 如果是,请分别检查国家代码和国家名称的第三和第四个元素
- 以下是我要做的:
- 我要说,它不是一个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];
}
}
我要说的是,它不是一个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];
}
}
来自:API参数格式,required=false,default=raw,values=raw,xml,json。因此,我对它进行了测试,stringurl=”http://api.ipinfodb.com/v3/ip-country/?key=“+ApiKey+”&ip=“+UserIP+”&format=xml”
提供可解析的xml结果 来自:API参数格式,required=false,default=raw,values=raw,xml,json。因此,我对它进行了测试,stringurl=”http://api.ipinfodb.com/v3/ip-country/?key=“+ApiKey+”&ip=“+UserIP+”&format=xml”
提供可解析的xml结果 我认为API提供商不允许共享您的API密钥。您链接到的内容在我看来不像XML。@Levente我在网站注册后获得了此API密钥。API密钥就像您应用程序的密码,我相信他建议您不要在公共论坛上为您(以及您的API提供商)列出您的个人API密钥安全性。我认为您的API提供商不允许共享您的API密钥。您链接的内容在我看来不像XML。@Levente我在网站注册后获得了此API密钥。API密钥就像您应用程序的密码,我相信他建议您不要在公共论坛上为您的应用程序列出您的个人API密钥(以及API提供商的)安全性。