0

ユーザーの国をデータベースに保存する必要があるという要件があります。そのためのチェックボックスまたはコンボボックスを保持できますが、ユーザーが入力しなくても国情報を取得する方法はありますか?? ユーザーが Web サイトにアクセスしている場所から国名を取得する方法はありますか?

4

2 に答える 2

0

それが IP ロケータ サービスです。サンプル コードとアプリケーションを参照してくださいhttp://www.geobytes.com/iplocator.htm。ソースは PHP ですが、Java で記述してみることができます。

于 2012-10-31T10:35:52.183 に答える
0

はい、これを行う方法はありますが、いくつかの作業が必要です。ユーザーが Web サイトにアクセスすると、以下を使用して IP アドレスを取得できます。

String ip = (request.getHeader("X_FORWARDED_FOR") == null ? request.getRemoteAddr() : request.getHeader("X_FORWARDED_FOR"));

次に、この IP アドレスをバイナリ形式に変換できます。

long binIp = ipToLong(ip);

ipToLong関数は次のようになります。

public long ipToLong(String addr) {
    String[] addrArray = addr.split("\\.");

    return Long.parseLong(addrArray[0]) << 24 +
           Long.parseLong(addrArray[1]) << 16 +
           Long.parseLong(addrArray[2]) << 8 +
           Long.parseLong(addrArray[3]);

}

最後に、IP アドレス データベースを使用して、この値が属する国を調べます。プロバイダーはいくつかあります。私たちはsoftware77から入手し (無料です)、ローカル データベースに保存し、月に 1 回ローカル DB を更新します。

いくつかのメモ:

  1. アドレスが設定されない場合もあるため、適切なデフォルト値を設定する必要があります。
  2. アドレスがスプーフィングされ、実際の IP アドレスを表していない場合があるため (形式的に)、適切な例外処理が必要になります。
  3. アドレスが予約済みの範囲 (192.168/16 など) からのものになる場合もあるため、ここでも妥当なデフォルト値を設定する必要があります。
于 2012-10-31T10:38:13.383 に答える