Найдите исходный код и инструкции по настройке клиента для вашего языка.
Клиентские библиотеки
Выберите язык
Установите клиент, выполните один запрос и прочитайте поля ответа.
TypeScript / JavaScript
enrichip
Проверено запуском
Требования
ES-модули · проверено на Node 26
Версия пакета
1.0.1
Установка
Терминал
npm install enrichip@1.0.1
Запрос одного IP
node lookup.mjs
lookup.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-примеры.
from ipapi.client import IPAPIClientclient = 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
Выполняйте команду установки внутри Go-модуля. QueryIP возвращает вложенное значение IPInfo и ошибку при неуспешном HTTP-ответе.
У клиента нет тайм-аута на отдельный вызов. При повторной сериализации результата теги omitempty исключают значения false и ноль; разобранные значения при этом сохраняются.
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.
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. Пример предназначен для использующего библиотеку проекта, где собранная библиотека включена в classpath; здесь он не проверялся запуском.
В исходниках используются статические методы из ipapi.java без API-ключа. Пространство имён io.ipapi и конструктор с API-ключом из README не соответствуют этой ревизии. HTTP-статус перед декодированием не проверяется.
C++
ipapi-cpp
Требуется обновление
Требования
C++20 · CMake · libcurl
Ревизия исходного кода
a5ae87c
Установка
Эту ревизию исходного кода нужно обновить перед использованием.
Текущий клиент разбирает каждый фрагмент ответа libcurl как полный JSON-документ. Ответ, разбитый на несколько фрагментов, может декодироваться неверно.
Сопоставление полей риска оставляет is_datacenter и risk_score незаданными. Callback для собственного IP также использует тип результата, отличный от ожидаемого вызывающим кодом. До исправления этих путей используйте стандартный HTTP-запрос.
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 в начале; имя IIpApiClient в README отличается.
Ответ использует вложенные объекты Isp, Location и Risk. Передайте токен отмены, чтобы ограничить запрос. Устаревший метод для нескольких IP не поддерживается API.
Перед интеграцией
Запросы одного IP
Указывайте один адрес на запрос. Некоторые клиенты всё ещё предоставляют массовые методы, но API отклоняет такие запросы. Правила массовых запросов
Ответы для собственного IP
Корневой эндпоинт по умолчанию возвращает публичный IP подключившегося процесса в текстовом виде. Чтобы получить полный JSON-ответ для собственного IP, используйте примеры HTTP
Область проверки
Проверено запуском означает, что показанный пакет или ревизия исходного кода были выполнены для запросов одного IP. Примеры исходного кода сверены с кодом, но не запускались. Ревизия исходников может отличаться от опубликованного пакета.