麻烦帮我用Java代码实现通过IP获取城市名称(精确到县或者区)
时间: 2023-12-16 21:06:23 浏览: 34
好的,你可以使用第三方的IP库来获取IP所在的城市名称。这里我介绍一个比较常用的库:GeoIP2。
首先,你需要去官网注册账号获取API key。然后,你需要添加 GeoIP2 的依赖。
```xml
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.10.0</version>
</dependency>
```
接下来,你可以使用以下代码来获取IP所在的城市名称:
```java
import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.exception.AddressNotFoundException;
import com.maxmind.geoip2.model.CityResponse;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPUtils {
private static final String GEOIP_CITY_DB = "GeoLite2-City.mmdb";
private static DatabaseReader reader;
static {
try {
// 加载GeoIP2库
File database = new File(IPUtils.class.getClassLoader().getResource(GEOIP_CITY_DB).getFile());
reader = new DatabaseReader.Builder(database).build();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getCityNameByIp(String ip) {
try {
InetAddress ipAddress = InetAddress.getByName(ip);
CityResponse response = reader.city(ipAddress);
return response.getCity().getName();
} catch (AddressNotFoundException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
```
其中,`GEOIP_CITY_DB` 是你下载的 GeoIP2 库的文件名,需要和你的实际文件名一致。
使用方法:
```java
String cityName = IPUtils.getCityNameByIp("127.0.0.1");
```
这里的IP地址可以是任何有效的IP地址。