Примеры запросов собственного IP
Все примеры обращаются к одному эндпоинту. Возвращаемый IP-адрес зависит от процесса, устанавливающего соединение.
Используйте модуль JavaScript или консоль браузера с нативными fetch и AbortSignal.timeout.
const response = await fetch(
"https://api.ipquery.io/?format=json",
{ signal: AbortSignal.timeout(5000) }
);
if (!response.ok) {
const message = await response.text();
throw new Error("IPQuery " + response.status + ": " + message);
}
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
Запустите в оболочке с cURL. При ошибках HTTP код завершения ненулевой; диагностические сообщения выводятся в stderr.
curl --fail --silent --show-error --max-time 5 \
"https://api.ipquery.io/?format=json"
Python 3, только стандартная библиотека. Тайм-аут применяется к операциям с сокетами.
import json
from urllib.request import urlopen
with urlopen("https://api.ipquery.io/?format=json", timeout=5) as response:
data = json.load(response)
print(json.dumps(data, indent=2))
Go, только стандартная библиотека. Сохраните как main.go и выполните go run main.go.
package main
import (
"io"
"log"
"net/http"
"os"
"time"
)
func main() {
client := &http.Client{Timeout: 5 * time.Second}
response, err := client.Get("https://api.ipquery.io/?format=json")
if err != nil { log.Fatal(err) }
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
log.Fatalf("IPQuery %s", response.Status)
}
if _, err := io.Copy(os.Stdout, response.Body); err != nil {
log.Fatal(err)
}
}
В примерах используются тайм-ауты в пять секунд и стандартные HTTP-средства языка. Обрабатывайте сбои в приложении, не подменяя их пустой IP-записью.