0

この APIを使用して、ユーザーの国を検索しています。XML 形式の Web ページで国を見つけることができます。ここでは、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 を読み取る正確な方法を説明してください。

4

3 に答える 3

2

これは 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];
    }
}
于 2013-08-16T06:22:30.643 に答える
1

IP Location XML API Documentationから: API パラメータの形式、必須 = false、デフォルト = raw、値 = raw、xml、json。私はそれをテストし、解析可能string Url = "http://api.ipinfodb.com/v3/ip-country/?key=" + ApiKey + "&ip=" + UserIP + "&format=xml"なxml結果を提供します。

于 2013-08-16T06:32:55.100 に答える
1

これが私がすることです:

  • HTTP 転送を使用して、サイトにクエリを実行し、結果をバッファリングします
  • それを文字列に変換します
  • 分割アルゴリズムを使用して配列にします。
  • 配列の 0 番目の要素が「OK」に等しいかどうかを確認します
  • そうでない場合は、救済します。
  • その場合は、国コードと国名の 3 番目と 4 番目の要素をそれぞれ確認してください。
于 2013-08-16T06:21:18.440 に答える