客户端库
查找所用语言客户端的源代码与设置说明。
客户端库
选择您的语言
安装客户端,执行一次查询并阅读响应字段。
TypeScript / JavaScript
已进行运行时检查enrichip
- 要求
- ES 模块 · 已在 Node 26 上验证
- 软件包版本
- 1.0.1
安装
终端
npm install enrichip@1.0.1查询一个 IP
node lookup.mjslookup.mjs
import { queryIP } from "enrichip";
const info = await queryIP("1.1.1.1");
console.log(JSON.stringify(info, null, 2));客户端行为
- 此示例使用已发布的 npm 软件包。其 IP 参数接受字符串,包括压缩 IPv6;代码仓库 HEAD 使用更严格的验证器。
- 客户端不提供单次请求超时设置。当您需要直接控制请求设置时,请使用 HTTP 示例。
Python
已进行运行时检查ipapi-py
- 要求
- 已在 Python 3.13 · Pydantic 2 上验证
- 源代码修订版本
- 9bd6552
安装
终端
git clone https://github.com/ipqwery/ipapi-py.git
cd ipapi-py
git checkout 9bd655266582ec70d90d01296aa92784da5a27a5
python -m pip install "httpx==0.28.1" "pydantic>=2,<3"查询一个 IP
python lookup.pylookup.py
from ipapi.client import IPAPIClient
client = IPAPIClient()
try:
info = client.query_ip("1.1.1.1")
print(info.model_dump_json(indent=2))
finally:
client.client.close()客户端行为
- 从源代码检出目录运行 lookup.py。已发布的 ipcore 0.1.2 发行包包含软件包元数据,但没有可导入的 ipapi 模块;因此此设置使用固定版本的代码仓库。
- 客户端使用 Pydantic 已弃用的 parse_raw 方法。使用后请关闭其 HTTP 客户端;该包装库没有上下文管理器。
Go
已进行运行时检查github.com/ipqwery/ipapi-go
- 要求
- Go 1.24.2 或更高版本
- 源代码修订版本
- fc7efc4
安装
终端
go get github.com/ipqwery/ipapi-go@fc7efc494870418b9f1143f642aba8f5802ebf9f查询一个 IP
go run .main.go
package main
import (
"fmt"
"log"
ipapi "github.com/ipqwery/ipapi-go"
)
func main() {
info, err := ipapi.QueryIP("1.1.1.1")
if err != nil {
log.Fatal(err)
}
fmt.Println(info.IP)
if info.ISP != nil {
fmt.Println(info.ISP.ASN)
}
}客户端行为
- 在 Go 模块中运行安装命令。QueryIP 返回嵌套的 IPInfo 值,并在 HTTP 响应不成功时返回错误。
- 客户端没有单次调用超时。如果再次序列化结果,其 omitempty 标签会省略 false 和零值;解析后的值仍会保留。
Rust
已进行运行时检查ipapi
- 要求
- Rust 2021 版 · Tokio
- 源代码修订版本
- 2313f1f
安装
终端
cargo add ipapi --git https://github.com/ipqwery/ipapi-rust --rev 2313f1f6028803d5fcffc3332bc3cfda8a61df7f
cargo add tokio --features macros,rt-multi-thread,time查询一个 IP
cargo runsrc/main.rs
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let info = tokio::time::timeout(
Duration::from_secs(5),
ipapi::query_ip("1.1.1.1"),
).await??;
println!("{}", info.ip);
if let Some(isp) = info.isp {
println!("{:?}", isp.asn);
}
Ok(())
}客户端行为
- 在 Cargo 项目中安装固定的源代码修订版本;文档所述的 crates.io 版本不可用。此示例通过五秒 Tokio 超时限制查询时长。
- 可选的嵌套字段使用 Option。客户端在解码响应前不会检查 HTTP 状态;请参阅 HTTP 参考以处理错误响应。
Java
源代码示例ipapi-java
- 要求
- JDK 21 · Gradle 包装器
- 源代码修订版本
- 5e303a5
安装
终端
git clone https://github.com/ipqwery/ipapi-java.git
cd ipapi-java
git checkout 5e303a5dd2a373ae5b56a1f53139d8b8ca7f6761
./gradlew :app:build查询一个 IP
Lookup.java
import ipapi.java.Ipapi;
import ipapi.java.IPInfo;
public class Lookup {
public static void main(String[] args) throws Exception {
IPInfo info = Ipapi.queryIp("1.1.1.1");
System.out.println(info.getIp());
if (info.getIsp() != null) {
System.out.println(info.getIsp().getAsn());
}
}
}客户端行为
- 使用 JDK 21 从固定版本的源代码构建。此示例应置于类路径包含已构建库的使用方项目中;此处尚未进行运行时检查。
- 源代码使用 ipapi.java 中的静态方法,无需 API 密钥。README 中的 io.ipapi 命名空间和 API 密钥构造函数与此修订版本不符。解码前不会检查 HTTP 状态。
C++
需要更新ipapi-cpp
- 要求
- C++20 · CMake · libcurl
- 源代码修订版本
- a5ae87c
安装
此源代码修订版本需要更新后才能使用。
查看 C++ 源代码查询一个 IP
客户端行为
- 当前客户端将每个 libcurl 响应分块都解析为完整的 JSON 文档。分布在多个分块中的响应可能无法正确解码。
- 风险映射未设置 is_datacenter 和 risk_score。本机 IP 回调使用的结果类型也与其调用方不同。在修复这些路径之前,请使用标准 HTTP 请求。
R
源代码示例ipapi
- 要求
- R 4.1 或更高版本
- 源代码修订版本
- 79cd732
安装
R 控制台
install.packages("remotes")
remotes::install_github("ipqwery/ipapi-r@79cd73249bd1f8fa41d950bc37ba5b9f6ee6d2d9")查询一个 IP
Rscript lookup.Rlookup.R
library(ipapi)
info <- query_ips("1.1.1.1")
print(info[, c("ip", "asn", "country_code")])客户端行为
- 向 query_ips 传入一个地址。包含多个地址的向量会使用旧版批量路径,API 会拒绝此路径。
- 结果是具有扁平化列的数据框。此固定源代码示例尚未在此处进行运行时检查。
.NET
已进行运行时检查IpApi
- 要求
- .NET 9+ · 已在 .NET 10 上验证
- 软件包版本
- 2024.12.23.223133
安装
终端
dotnet add package IpApi --version 2024.12.23.223133查询一个 IP
dotnet runProgram.cs
using IpApi;
using Microsoft.Extensions.DependencyInjection;
using System.Text.Json;
var services = new ServiceCollection();
services.AddIpApiClient();
using var provider = services.BuildServiceProvider();
var client = provider.GetRequiredService<IIApiClient>();
using var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var info = await client.QueryIpAsync("1.1.1.1", timeout.Token);
if (info is null) throw new InvalidOperationException("Empty IP response");
Console.WriteLine(JsonSerializer.Serialize(info));客户端行为
- 在 .NET 控制台项目中运行此示例。注册的接口是 IIApiClient,开头为两个 I 字符;README 中的 IIpApiClient 名称与之不同。
- 响应使用嵌套的 Isp、Location 和 Risk 对象。传入取消令牌以限制请求时长。API 不支持旧版多 IP 方法。
集成之前
- 单 IP 请求
- 每次查询使用一个地址。某些客户端仍提供批量方法;API 会拒绝批量请求。 阅读批量查询策略
- 本机 IP 响应
- 根端点默认以文本返回建立连接的进程的公网 IP。如需完整的本机 IP JSON 响应,请使用 HTTP 示例
- 验证范围
- 已进行运行时检查表示已使用所显示的软件包或源代码修订版本执行单 IP 查询。源代码示例已对照代码审阅,但尚未执行。源代码修订版本可能与已发布的软件包不同。