【问题标题】:Java / Javascript - Get the ip from the clientJava / Javascript - 从客户端获取 ip
【发布时间】:2012-09-02 01:53:40
【问题描述】:

我正在使用 java playframework2,我似乎无法使用它获得正确的 IP 地址。它在每次请求后不断变化。

我的意思是流量分析网站在你的标题中实现了 javascript 来分析你的流量,所以应该可以使用 javascript 对吗?

  • 如果框架不提供这样的功能,还有其他方法可以从客户端获取ip吗?

  • 我想建立一个访客计数器,但它应该只计算唯一访客。也许我不必使用IP地址?

我知道有http://jsonip.appspot.com/,但它不可靠。过去 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 地址都会不同。

【问题讨论】:

  • 可以通过play框架获取ip地址,或许你应该向我们展示一些你正在尝试用代码做什么。
  • @Jordan:更新了我的代码
  • 我添加了一个答案,希望能解决您的问题,而无需额外工作来实施辅助 ip 检测系统。

标签: java javascript heroku ip playframework-2.0


【解决方案1】:

Heroku 不会直接将远程地址返回给您的播放应用程序。相反,您看到的是作为 heroku 一部分的各种内部负载平衡服务器。不过,好消息是您可以按照以下方式轻松解决此问题:https://play.lighthouseapp.com/projects/82401/tickets/705-remoteaddress-seems-to-get-dynamically-client-ip-on-heroku

简单地说:将其添加到您的 application.conf 中

trustxforwarded=true

【讨论】:

  • 好的,这很好用。只是一个问题,我现在得到了两个 IP 地址,例如 "ip-address, another-ip-address" 第二个 IP 地址是什么,我应该删除它吗?
【解决方案2】:

对于 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

Here 是一个现场工作演示。

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 2017-08-11
    • 2014-05-06
    • 2011-12-03
    • 2020-12-08
    • 1970-01-01
    • 2021-10-19
    • 2021-06-01
    • 2019-05-08
    相关资源
    最近更新 更多