Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从ip地址查找国家/地区?_C# - Fatal编程技术网

C# 如何从ip地址查找国家/地区?

C# 如何从ip地址查找国家/地区?,c#,C#,我正在使用查找用户的国家/地区。我可以在网页上找到XML格式的国家。您可以看到XML文件示例。但问题是我无法在c代码中读取此XML。这是我的密码 string UserIP = Request.ServerVariables["REMOTE_ADDR"].ToString(); string ApiKey = "5d3d0cdbc95df34b9db4a7b4fb754e738bce4ac914ca8909ace8d3ece39cee3b"; string Url = "http://api.i

我正在使用查找用户的国家/地区。我可以在网页上找到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的确切方法。

以下是我要做的:

  • 使用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提供商的)安全性。