接口概述

重要更新:本接口现已启用授权验证,所有调用必须携带有效的 key(授权码)参数,否则将返回401未授权错误!

本接口提供IP地址/域名的归属地查询服务,支持IPv4地址查询、域名自动解析后查询,返回包含国家、省份、城市、运营商等详细信息的JSON格式数据。
接口优先级:主接口 → 备用接口1 → 备用接口2 → 备用接口3 → 备用接口4,不同接口返回字段完整性不同,空值/未知字段会自动过滤。

项目 说明
接口地址 http://ping.4759.cn/api/ip.php
请求方式 GET
返回格式 JSON(UTF-8编码)
跨域支持 支持(允许所有域名调用)
调用限制 单授权码最多20次/分钟(防止恶意刷接口)
授权要求 必须携带有效的key参数(授权码),否则返回401未授权
字段特性 主接口返回字段最全,备用接口部分字段缺失,空值/未知字段自动隐藏;电话区号仅展示接口原生返回值,无则自动过滤(无预设映射)

接口参数说明

请求参数

参数名 是否必填 类型 说明 示例值
key 字符串 API授权码(联系管理员获取) key_1234567890abcdef1234567890abcdef_9876543210
ip 字符串 要查询的IPv4地址或域名(域名会自动解析为IP后查询) 123.161.169.10 / www.baidu.com
format 字符串 返回格式,仅支持json(默认值),预留扩展其他格式 json

返回参数(JSON)

层级 参数名 类型 说明
顶级 code 整数 状态码(200=成功,400=参数错误,401=未授权,403=授权封禁,404=域名解析失败,429=调用超限,500=接口异常)
顶级 msg 字符串 状态描述(成功/失败原因)
顶级 data 对象 查询结果数据(仅code=200时有值,空值/未知字段会自动过滤)
data层 input 字符串 原始输入的IP/域名
data层 ip 字符串 最终查询的IPv4地址(域名会解析为IP)
data层 domain_parse_msg 字符串 域名解析提示(非域名查询时为空)
data层 country 字符串 国家/地区
data层 province 字符串 省份/直辖市
data层 city 字符串 城市(含区县,无区县则只显示城市)
data层 isp 字符串 网络运营商(如电信、联通、移动)
data层 big_area 字符串 大区(如华北、华东、华南等)备用接口返回
data层 zip_code 字符串 邮政编码(仅接口原生返回时有值)
data层 telcode 字符串 电话区号(仅接口原生返回时有值,无则自动过滤)部分备用接口返回
data层 lng 字符串 经度备用接口返回
data层 lat 字符串 纬度备用接口返回
data层 continent 字符串 IP所属洲仅主接口返回
data层 district 字符串 区县仅主接口返回完整
data层 zipcode 字符串 邮政编码(主接口字段,等同于zip_code)
data层 areacode 字符串 国家代码(主接口字段,非电话区号)仅主接口返回
data层 adcode 字符串 行政区划代码仅主接口返回

状态码说明

状态码 说明 解决方案
200 查询成功 正常解析data字段即可(空值字段会自动过滤)
400 参数错误 检查是否传入ip参数,参数是否为空
401 未授权 检查是否携带有效的key(授权码)参数
403 授权码已封禁 联系管理员解封或更换授权码
404 域名解析失败 确认域名是否正确,或该域名是否有IPv4解析记录
429 调用频率超限 等待1小时后再调用,或联系接口提供方调整限制
500 数据源接口异常 稍等片刻重试,若持续失败可联系接口提供方排查

调用示例

1. 直接浏览器访问(测试用)

示例1:带授权码的正常调用

请求地址:http://ping.4759.cn/api/ip.php?key=key_1234567890abcdef1234567890abcdef_9876543210&ip=123.161.169.10

返回结果:

{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "input": "123.161.169.10",
    "ip": "123.161.169.10",
    "country": "中国",
    "province": "河南",
    "city": "驻马店驿城区",
    "isp": "中国电信",
    "continent": "亚洲",
    "zipcode": "463900",
    "areacode": "CN",
    "adcode": "411702"
  }
}

示例2:缺少授权码(返回401未授权)

请求地址:http://ping.4759.cn/api/ip.php?ip=123.161.169.10

返回结果:

{
    "code": 401,
    "msg": "未授权:缺少有效的API授权码(key参数),由 4759.cn 提供服务",
    "data": null
}

2. PHP调用示例

<?php
/**
 * PHP调用IP查询API示例
 */

// 接口配置
$apiUrl = 'http://ping.4759.cn/api/ip.php';
$apiKey = 'key_1234567890abcdef1234567890abcdef_9876543210'; // 你的授权码
$target = 'www.baidu.com'; // 要查询的IP/域名

// 拼接请求URL(新增key参数)
$requestUrl = $apiUrl . '?key=' . urlencode($apiKey) . '&ip=' . urlencode($target);

// 初始化curl
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $requestUrl,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false
]);

// 发起请求并处理结果
$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
if ($result['code'] == 200) {
    echo "查询成功:" . json_encode($result['data'], JSON_UNESCAPED_UNICODE);
} else {
    echo "查询失败:{$result['msg']}(状态码:{$result['code']})";
}
?>

3. JavaScript/AJAX调用示例

<script>
/**
 * 前端调用IP查询API示例
 */
const apiKey = 'key_1234567890abcdef1234567890abcdef_9876543210'; // 你的授权码
const apiUrl = 'http://ping.4759.cn/api/ip.php';
const target = '8.8.8.8';

// 拼接请求URL(新增key参数)
const requestUrl = `${apiUrl}?key=${encodeURIComponent(apiKey)}&ip=${encodeURIComponent(target)}`;

// 发起请求
fetch(requestUrl)
    .then(response => response.json())
    .then(result => {
        if (result.code === 200) {
            console.log('查询结果:', result.data);
        } else {
            console.error('查询失败:', result.msg);
        }
    })
    .catch(error => {
        console.error('请求失败:', error);
    });
</script>

在线测试

输入授权码和IP/域名后 点击"发起请求"按钮查看测试结果...

注意事项

温馨提示:
  • 参数编码:传入的IP/域名需经过URL编码(示例中已包含,特殊字符如空格、中文域名必须编码);
  • 超时处理:所有调用建议设置10秒以内的超时时间,避免接口响应慢导致程序阻塞;
  • 频率限制:单授权码最多20次/分钟,超出后会返回429状态码,需做好重试逻辑;
  • 异常处理:需兼容接口返回非200状态码、JSON解析失败、网络超时等场景;
  • 域名解析:域名查询依赖DNS解析,部分小众域名可能解析失败(返回404),需提示用户;
  • 字段特性:空值/未知字段会自动过滤,调用时无需判断字段是否存在,直接使用即可;
  • 字段说明:areacode为国家代码(如CN),非电话区号;电话区号字段为telcode,仅接口原生返回时有值;
  • 接口降级:主接口失败会自动切换到备用接口,返回字段会相应减少,但核心字段(country/province/city/isp)始终存在;
  • 电话区号:仅展示接口原生返回值,无预设映射表,无则自动过滤
  • 数据准确性:IP归属地数据部分IP可能存在归属地偏差,仅供参考。

常见问题解答

Q1:调用接口返回429怎么办?
A1:429表示当前IP调用频率超限,需等待1小时后再调用,或联系接口提供方调整限制额度。
Q2:域名解析失败(404)是什么原因?
A2:可能是域名不存在、无IPv4解析记录、DNS解析异常,可先在本地ping该域名确认是否能解析。
Q3:前端调用时出现跨域错误?
A3:接口已配置跨域允许所有域名访问,若仍报错请检查:1. 接口地址是否正确;2. 是否使用HTTPS访问HTTP接口(浏览器会拦截);3. 建议优先使用后端语言(PHP/Java/Python)调用。
Q4:为什么返回的字段有时多有时少?
A4:不同接口返回字段完整性不同(主接口最全),且空值/未知字段会自动过滤,属于正常现象,核心字段始终存在。
Q5:为什么返回结果中有areacode但没有电话区号?
A5:areacode是主接口返回的国家代码(如CN),并非电话区号;电话区号字段为telcode,仅部分备用接口会原生返回,无则自动过滤。
Q6:经纬度字段有时为空?
A6:主接口不返回经纬度,仅备用接口返回,部分IP的经纬度数据未收录时会自动过滤该字段。
Q7:为什么没有电话区号返回?
A7:电话区号仅展示接口原生返回值,主接口无原生电话区号字段,部分备用接口也未收录该IP的电话区号,无则自动过滤,属于正常现象。
Q8:免费使用吗?
A8:本接口永久免费使用,商业大量使用需联系接口提供方授权。
Q9:在线测试提示无效apikey,但前端调用正常?
A9:可能是前端JS跨域调用限制/参数编码问题,建议优先使用PHP/后端语言调用;或检查授权码是否输入正确(注意大小写/特殊字符)。