我正在使用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地址都不同。
答案 0 :(得分:4)
Heroku不会直接将远程地址返回到您的播放应用程序。相反,您所看到的是各种内部负载平衡服务器,它们是heroku的一部分。但是,好消息是您可以按照https://play.lighthouseapp.com/projects/82401/tickets/705-remoteaddress-seems-to-get-dynamically-client-ip-on-heroku
轻松解决此问题简单地说:将其添加到您的application.conf
trustxforwarded=true
答案 1 :(得分: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
Here 是一个实时工作演示。