2 回答
TA贡献1835条经验 获得超7个赞
我推荐使用http://ip-api.com/docs/api:newline_separated
然后您可以选择您需要的信息并创建您的 HTTP 链接,例如:
http://ip-api.com/line/8.8.8.8?fields=49471
此示例中的结果将是:
success
United States
US
VA
Virginia
Ashburn
20149
America/New_York
因此,您可以在 Java 中创建一个方法来读取 HTTP 并将其拆分\n为获取行:
private void whatever(String ip) {
String ipinfo = getHttp("http://ip-api.com/line/" + ip + "?fields=49471");
if (ipinfo == null || !ipinfo.startsWith("success")) {
// TODO: failed
return;
}
String[] lines = ipinfo.split("\n");
// TODO: now you can get the info
String country = lines[1];
/*
...
*/
}
private static String getHttp(String url) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line).append(System.lineSeparator());
}
br.close();
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
只需确保不要在短时间内创建太多查询,因为 ip-api.com 会禁止您这样做。
TA贡献1820条经验 获得超9个赞
有很多网站提供免费的 IP 地理定位数据库。
例子包括:
在插件启动时,您可以下载这些数据库之一,然后在运行时在本地查询它。
如果您选择下载 .bin 格式,则必须初始化本地数据库,然后导入数据。否则,您可以将 csv 文件与opencsv之类的 Java 库一起使用。
从 opencsv 的文档:
对于阅读,创建一个 bean 来存放您想要阅读的信息,用 opencsv 注释注释 bean 字段,然后执行以下操作:
List<MyBean> beans = new CsvToBeanBuilder(FileReader("yourfile.csv")) .withType(Visitors.class).build().parse();
文档链接: http: //opencsv.sourceforge.net
添加回答
举报