首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

常用 IP 地址查詢 API 接口整理 (JSONP/JSON)

     編輯:PHP 相關知識

前端獲取用戶 IP 及地理位置常用第三方 API 整理,涵蓋騰訊、新浪、搜狐、谷歌、有道等主流服務商,對比返回格式、調用方式、適用場景。

主流 API 列表

服務商接口地址返回格式支持協議備註
騰訊https://fw.qq.com/ipaddressJS 變量HTTP需腳本引入,返回 IPData 數組
新浪https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=jsJS 變量HTTP返回 remote_ip_info 對象,含 Unicode 編碼
搜狐https://pv.sohu.com/cityjsonJS 變量HTTP返回 returnCitySN 對象,極簡
谷歌https://j.maxmind.com/app/geoip.jsJS 變量HTTPMaxMind 服務,需引用腳本
有道https://www.youdao.com/smartresult-xml/search.sXML/JSHTTP參數較複雜
1616https://w.1616.net/chaxun/iptolocal.phpHTML/JSHTTP老牌查詢站
126https://ip.ws.126.net/ipqueryJS 變量HTTP網易服務
hao123https://app.hao123.com/ipquery/getcity.php?rtype=2JSONPHTTP支持 callback 參數

返回數據格式示例

騰訊

<script src="https://fw.qq.com/ipaddress"></script>
<script>
document.write("IP: " + IPData[0] + ", 地址: " + IPData[2] + " " + IPData[3]);
// IPData = ["58.218.198.205", "", "江蘇省", "徐州市"]
</script>

新浪

var remote_ip_info = {
    "ret": 1,
    "start": "123.68.0.0",
    "end": "123.68.195.255",
    "country": "中國",
    "province": "湖南",
    "city": "長沙",
    "district": "",
    "isp": "鐵通",
    "type": "",
    "desc": ""
};

搜狐 (最簡潔)

var returnCitySN = {
    "cip": "123.68.122.147",
    "cid": "430000",
    "cname": "湖南省"
};

前端調用最佳實踐

1. 統一封裝 Promise 接口

function getUserIP() {
    const apis = [
        {url: 'https://api.ipify.org?format=json', parser: d => d.ip},
        {url: 'https://httpbin.org/ip', parser: d => d.origin},
        {url: 'https://ipapi.co/json/', parser: d => d.ip},
    ];
    
    return Promise.any(apis.map(api => 
        fetch(api.url).then(r => r.json()).then(api.parser)
    ));
}

// 使用
getUserIP().then(ip => console.log('用戶 IP:', ip));

2. 獲取地理位置 (推薦 ipapi.co / ipinfo.io)

async function getGeoInfo() {
    try {
        const res = await fetch('https://ipapi.co/json/');
        const data = await res.json();
        return {
            ip: data.ip,
            city: data.city,
            region: data.region,
            country: data.country_name,
            isp: data.org,
            lat: data.latitude,
            lon: data.longitude,
        };
    } catch (e) {
        return null;
    }
}

3. 兼容老項目 JSONP 封裝

function jsonp(url, callbackName = 'callback') {
    return new Promise((resolve, reject) => {
        const cb = `jsonp_${Date.now()}_${Math.random().toString(36).substr(2)}`;
        window[cb] = (data) => {
            resolve(data);
            delete window[cb];
            document.head.removeChild(script);
        };
        const script = document.createElement('script');
        script.src = `${url}${url.includes('?') ? '&' : '?'}${callbackName}=${cb}`;
        script.onerror = () => reject(new Error('JSONP load failed'));
        document.head.appendChild(script);
    });
}

// 搜狐調用
jsonp('https://pv.sohu.com/cityjson').then(data => {
    console.log(data.returnCitySN);
});

服務端獲取客戶端真實 IP (PHP)

<?php
function getClientIP() {
    $headers = [
        'HTTP_CF_CONNECTING_IP',    // Cloudflare
        'HTTP_X_FORWARDED_FOR',     // 標準代理
        'HTTP_X_REAL_IP',           // Nginx proxy
        'HTTP_CLIENT_IP',
        'REMOTE_ADDR',
    ];
    
    foreach ($headers as $header) {
        if (!empty($_SERVER[$header])) {
            $ips = explode(',', $_SERVER[$header]);
            $ip = trim($ips[0]);
            if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                return $ip;
            }
        }
    }
    return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
}

// 結合離線數據庫 (MaxMind GeoIP2)
require 'vendor/autoload.php';
$reader = new GeoIp2\Database\Reader('GeoLite2-City.mmdb');
$record = $reader->city(getClientIP());
echo $record->country->name . ' ' . $record->city->name;

選型建議

  1. 現代項目:ipapi.co、ipinfo.io、cloudflare.com/cdn-cgi/trace (HTTPS、JSON、CORS 友好)
  2. 國內舊項目:搜狐 pv.sohu.com/cityjson (極簡、無依賴)
  3. 高並發/商業級:自建 MaxMind GeoIP2 離線數據庫 + 定期更新
  4. 隱私合規:告知用戶、最小化收集、遵循 GDPR/個信法

第三方免費 API 穩定性無保障,核心業務建議自建或采購商業服務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved