根據用戶 IP 地址快速獲取地理位置(國家、省份、城市),適用於個性化推薦、風控、日誌分析等場景。
java.net.URL、InputStreamorg.json:json 解析 JSON 響應public class GetPlaceByIp {
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) sb.append((char) cp);
return sb.toString();
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
try (InputStream is = new URL(url).openStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
return new JSONObject(readAll(rd));
}
}
public static void main(String[] args) throws Exception {
// 百度 IP 定位 API,ak 需申請,ip 為目標 IP
String apiUrl = "https://api.map.baidu.com/location/ip?ak=YOUR_AK&ip=202.198.16.3";
JSONObject json = readJsonFromUrl(apiUrl);
System.out.println(json);
System.out.println("地址:" + json.getJSONObject("content").getString("address"));
}
}
finally 塊確保流關閉,即使 return 也會執行{status:0, content:{address:"...", ...}}| 方案 | 優點 | 缺點 |
|---|---|---|
| 百度/高德/騰訊 IP API | 免費額度大、維護簡單 | 依賴第三方、準確度受限 |
| 本地 GeoIP 庫 | 離線、低延遲、可控 | 需定期更新數據、佔用磁盤 |
| 自建服務 | 完全可控 | 開發維護成本高 |