2

Java playframework2 を使用していますが、正しい IP アドレスを取得できないようです。リクエストごとに常に変更されます。

つまり、トラフィック分析サイトはヘッダーに JavaScript を実装してトラフィックを分析するので、JavaScript で可能でしょうか?

  • フレームワークがそのような機能を提供しない場合、クライアントから IP を取得する他の方法はありますか?

  • 訪問者カウンターを作成したいのですが、ユニーク訪問者のみをカウントする必要があります。たぶん、IPアドレスを使用する必要はありませんか?

http://jsonip.appspot.com/があることは知っていますが、信頼できません。Google App Engine の割り当てを超えたため、この 2 日間は使用できませんでした。

ここに私のコードがあります

public static <T> void increaseViews(String title, String ip,
        Class<T> objClass) throws UnknownHostException, MongoException,
        DbAuthException {
    Logger.info("Ip address: " + ip);
    String ipCache = title + "-" + ip;
    if (Cache.get(ipCache) == null) {
        Cache.set(ipCache, "block", 86400);
        increment(title, objClass);
    }

}

private static <T> void increment(String title, Class<T> objClass)
        throws UnknownHostException, MongoException, DbAuthException {
    // update database
}

そして私はそれを次のように呼びます:

UserGuides.increaseViews(ug.title, request().remoteAddress(),
                UserGuides.class);

Heroku のログをたどると、ページをリロードするたびに IP アドレスが異なります。

4

2 に答える 2

4

Heroku は、リモート アドレスを Play アプリケーションに直接返すことはありません。代わりに、heroku の一部であるさまざまな内部負荷分散サーバーが表示されます。ただし、良いニュースは、 https ://play.lighthouseapp.com/projects/82401/tickets/705-remoteaddress-seems-to-get-dynamically-client-ip-on-heroku に従って簡単に修正できることです。

簡単に言えば、これをapplication.confに追加します

trustxforwarded=true
于 2012-09-08T12:48:52.463 に答える
3

JavaScript の場合、jQuery Lib とEasyJquery JS が必要です。この API は高速で、完全な情報を返します。

<!-- Require jQuery / Anyversion --><script type="text/javascript" language="Javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<!-- Require EasyJQuery After JQuery --><script type="text/javascript" language="Javascript" src="http://api.easyjquery.com/easyjquery.js"></script>
<script type="text/javascript" language="Javascript">
    // 1. Your Data Here
    function my_callback(json) {
        alert("IP :" + json.IP + " nCOUNTRY: " + json.COUNTRY);
    }

    function my_callback2(json) {
        // more information at http://api.easyjquery.com/test/demo-ip.php
        alert("IP :" + json.IP + " nCOUNTRY: " + json.COUNTRY + " City: " + json.cityName + " regionName: " + json.regionName);
    }

    // 2. Setup Callback Function
   // EasyjQuery_Get_IP("my_callback"); // fastest version
    EasyjQuery_Get_IP("my_callback2","full"); // full version
</script>

EasyjQuery を使用するJSONPため、コールバック関数 (json) が必要です。EasyjQuery_Get_IP(“your_callback_function”)関数はいつでも呼び出すことができます。これはリクエストから返される情報です:

[IP] => 93.154.204.208
[continentCode] => NA
[continentName] => North America
[countryCode2] => US
[COUNTRY] => US
[countryCode3] => USA
[countryName] => United States
[regionName] => California
[cityName] => Garden Grove
[cityLatitude] => 33.7877
[cityLongitude] => -117.9738
[countryLatitude] => 38
[countryLongitude] => -98
[localTimeZone] => America/Los_Angeles
[localTime] => 03:33:28 am

これがライブワーキングデモです。

于 2012-09-08T12:35:25.437 に答える