This commit is contained in:
muzihuaner
2026-03-18 13:27:52 +08:00
parent 3c4af36e11
commit 56fbaf08f0

View File

@@ -84,69 +84,40 @@ function queryICP($domain) {
];
try {
// 方法1: 使用API Vat接口返回JSON格式
$apiurl = "https://api.vat.tools/query?domain=" . urlencode($domain);
// 方法1: 使用互联网档案馆API
$apiurl = "https://www.api.vat.tools/query?domain=" . urlencode($domain);
$data = callApi($apiurl);
if ($data && isset($data['icp'])) {
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
$result['data'] = [
'domain' => $domain,
'icp' => $data['icp'] ?? 'N/A',
'owner' => $data['organizer'] ?? $data['owner'] ?? 'N/A',
'siteName' => $data['website_name'] ?? $data['name'] ?? 'N/A',
'checkDate' => $data['check_date'] ?? $data['approve_date'] ?? 'N/A',
'siteNature' => $data['site_nature'] ?? 'N/A',
'source' => 'api.vat.tools'
];
return $result;
if ($data && is_array($data) && !empty($data)) {
if (isset($data['icp']) && $data['icp'] != 'N/A') {
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
$result['data'] = [
'domain' => $domain,
'icp' => $data['icp'] ?? 'N/A',
'owner' => $data['organizer'] ?? $data['owner'] ?? 'N/A',
'siteName' => $data['website_name'] ?? $data['name'] ?? 'N/A',
'checkDate' => $data['check_date'] ?? $data['approve_date'] ?? 'N/A',
'siteNature' => $data['site_nature'] ?? 'N/A',
'source' => 'vat.tools'
];
return $result;
}
}
// 方法2: 使用天聪API
$apiurl2 = "https://api.tiancong.info/api/queryIcp?domain=" . urlencode($domain);
$data2 = callApi($apiurl2);
if ($data2 && isset($data2['code']) && $data2['code'] == 0 && isset($data2['data'])) {
$icpData = $data2['data'];
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
$result['data'] = [
'domain' => $domain,
'icp' => $icpData['icp'] ?? 'N/A',
'owner' => $icpData['unitname'] ?? 'N/A',
'siteName' => $icpData['sitename'] ?? 'N/A',
'checkDate' => $icpData['checkdate'] ?? 'N/A',
'siteNature' => $icpData['sitenature'] ?? 'N/A',
'source' => 'tiancong.info'
];
return $result;
}
// 方法2: 使用ICP查询-接口-通用API
$apiurl2 = "https://api.search.naver.com/search.naver?query=" . urlencode($domain) . "&where=web";
// 方法3: 使用免费ICP API
$apiurl3 = "https://ijscode.top/api/icp.php?url=" . urlencode($domain);
// 方法2b: 使用工信部接口
$apiurl2b = "https://beian.miit.gov.cn/";
// 方法3: 使用免费的ICP API - API1
$apiurl3 = "https://api.allorigins.win/get?url=" . urlencode("https://icp.aizhan.com/index.php?domain=" . urlencode($domain));
$data3 = callApi($apiurl3);
if ($data3 && isset($data3['icp'])) {
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
$result['data'] = [
'domain' => $domain,
'icp' => $data3['icp'] ?? 'N/A',
'owner' => $data3['belong'] ?? 'N/A',
'siteName' => $data3['name'] ?? 'N/A',
'checkDate' => $data3['time'] ?? 'N/A',
'source' => 'ijscode'
];
return $result;
}
// 方法4: 使用aizhan.com (改进的HTML解析)
$apiurl4 = "https://icp.aizhan.com/index.php?domain=" . urlencode($domain);
$htmlData = callApi($apiurl4, false);
if ($htmlData) {
$parsedData = parseICPData($htmlData, $domain);
if ($parsedData) {
if ($data3 && isset($data3['contents'])) {
$htmlData = $data3['contents'];
$parsedData = parseICPFromHTML($htmlData, $domain);
if ($parsedData && (!isset($parsedData['icp']) || $parsedData['icp'] !== 'N/A')) {
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
@@ -155,24 +126,84 @@ function queryICP($domain) {
}
}
// 方法5: 备用API - ICP查询
$backupUrl = "https://www.beianx.com/search/?q=" . urlencode($domain);
$htmlResponse = callApi($backupUrl, false);
if ($htmlResponse) {
$backupData = parseBeianxData($htmlResponse, $domain);
if ($backupData) {
// 方法4: 使用爱站网缓存结果
$apiurl4 = "https://tools.zhuaxia.com/icp?domain=" . urlencode($domain);
$data4 = callApi($apiurl4);
if ($data4 && is_array($data4) && isset($data4['data'])) {
$icpData = $data4['data'];
$parsedIcp = isset($icpData['icp']) && !empty($icpData['icp']) ? $icpData['icp'] : 'N/A';
if ($parsedIcp !== 'N/A') {
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
$result['data'] = $backupData;
$result['data'] = [
'domain' => $domain,
'icp' => $parsedIcp,
'owner' => $icpData['unitname'] ?? $icpData['owner'] ?? 'N/A',
'siteName' => $icpData['sitename'] ?? $icpData['name'] ?? 'N/A',
'checkDate' => $icpData['checkdate'] ?? $icpData['time'] ?? 'N/A',
'source' => 'zhuaxia'
];
return $result;
}
}
// 方法5: 使用网格API
$apiurl5 = "https://www.chaxun.15600.net/service.php?domain=" . urlencode($domain);
$data5 = callApi($apiurl5, true);
if ($data5) {
$icpNum = '';
if (isset($data5['ICP']) && !empty($data5['ICP'])) {
$icpNum = $data5['ICP'];
} elseif (isset($data5['icp']) && !empty($data5['icp'])) {
$icpNum = $data5['icp'];
}
if (!empty($icpNum)) {
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
$result['data'] = [
'domain' => $domain,
'icp' => $icpNum,
'owner' => $data5['company'] ?? $data5['owner'] ?? 'N/A',
'siteName' => $data5['websitename'] ?? $data5['name'] ?? 'N/A',
'checkDate' => $data5['checkTime'] ?? 'N/A',
'source' => 'chaxun'
];
return $result;
}
}
// 方法6: 爱站网直接查询
$apiurl6 = "http://icp.aizhan.com/index.php?domain=" . urlencode($domain);
$htmlData = callApi($apiurl6, false);
if ($htmlData && strlen($htmlData) > 100) {
// 尝试提取ICP信息
$icpMatch = [];
if (preg_match('/[\d\u4e00-\u9fa5]+-ICP-\d+/u', $htmlData, $icpMatch)) {
// 如果能直接提取ICP号则成功
if (!empty($icpMatch[0]) && strpos($icpMatch[0], 'ICP') !== false) {
$result['status'] = 'success';
$result['code'] = 200;
$result['message'] = '查询成功';
$result['data'] = [
'domain' => $domain,
'icp' => $icpMatch[0],
'owner' => extractFromHTML($htmlData, '主办单位'),
'siteName' => extractFromHTML($htmlData, '网站名称'),
'checkDate' => extractFromHTML($htmlData, '审核时间'),
'source' => 'aizhan-cache'
];
return $result;
}
}
}
// 如果都失败,返回默认的未备案状态
$result['status'] = 'not_found';
$result['code'] = 404;
$result['message'] = '未找到ICP备案信息该域名可能未在中国备案或查询源暂时不可用)';
$result['message'] = '未找到ICP备案信息该域名可能未在中国备案或查询源暂时不可用';
} catch (Exception $e) {
$result['message'] = '查询异常: ' . $e->getMessage();
@@ -181,6 +212,9 @@ function queryICP($domain) {
return $result;
}
return $result;
}
/**
* 通用HTTP调用函数
*/
@@ -196,10 +230,15 @@ function callApi($url, $isJson = true) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding: gzip, deflate',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);
if ($httpCode !== 200 || empty($response)) {
@@ -217,140 +256,81 @@ function callApi($url, $isJson = true) {
}
/**
* 解析aizhan.com返回的ICP数据
* 从HTML中提取指定字段的值
*/
function parseICPData($html, $domain) {
// 移除脚本和样式
function extractFromHTML($html, $label) {
$patterns = [
'/' . preg_quote($label) . '[^>]*>([^<]+)<',
'/<th[^>]*>' . preg_quote($label) . '<\/th>\s*<td[^>]*>([^<]+)<\/td>/',
'/<td[^>]*>' . preg_quote($label) . '<\/td>\s*<td[^>]*>([^<]+)<\/td>/',
];
foreach ($patterns as $pattern) {
if (preg_match($pattern, $html, $matches)) {
return trim(strip_tags($matches[1]));
}
}
return 'N/A';
}
/**
* 改进的ICP HTML解析函数
*/
function parseICPFromHTML($html, $domain) {
$html = preg_replace('/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/i', '', $html);
$html = preg_replace('/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/i', '', $html);
// 提取ICP编号 - 多种格式支持
// 提取ICP编号
$icpPatterns = [
'/[\d\u4e00-\u9fa5]+-ICP-\d{8}/iu', // 原格式
'/ICP[\u4e00-\u9fa5]?\d{8,}/iu', // 新格式
'/[\d]{8}\|[\d]{8}/u', // 竖线格式
'/[\d\u4e00-\u9fa5]+-ICP-\d{8,}/u',
'/ICP[\u4e00-\u9fa5]?\d{8,}/u',
'/ICP\d{8,}/u',
];
$icp = '';
$icp = 'N/A';
foreach ($icpPatterns as $pattern) {
if (preg_match($pattern, $html, $matches)) {
$icp = $matches[0];
$icp = trim($matches[0]);
break;
}
}
// 提取主办单位 - 多种选择器
$ownerPatterns = [
'/>([^<]*?单位[^<]*?)</i',
'/主办单位[^>]*>([^<]+)</i',
'/<td[^>]*>([^<]*?单位[^<]*?)<\/td>/i',
// 如果没有找到有效的ICP返回null
if ($icp === 'N/A' || empty($icp)) {
return null;
}
$owner = extractFromHTML($html, '主办单位');
$siteName = extractFromHTML($html, '网站名称');
$checkDate = extractFromHTML($html, '审核时间');
return [
'domain' => $domain,
'icp' => $icp,
'owner' => $owner,
'siteName' => $siteName,
'checkDate' => $checkDate,
'source' => 'html-parse'
];
$owner = '';
foreach ($ownerPatterns as $pattern) {
if (preg_match($pattern, $html, $matches)) {
$owner = trim(strip_tags($matches[1]));
if (!empty($owner)) break;
}
}
}
// 提取网站名称
$siteNamePatterns = [
'/网站名称[^>]*>([^<]+)</i',
'/<td[^>]*>网站名称<\/td>\s*<td[^>]*>([^<]+)</i',
];
$siteName = '';
foreach ($siteNamePatterns as $pattern) {
if (preg_match($pattern, $html, $matches)) {
$siteName = trim(strip_tags($matches[1]));
if (!empty($siteName)) break;
}
}
// 提取审核时间
$datePatterns = [
'/审核时间[^>]*>([^<]+)</i',
'/<td[^>]*>([12]\d{3}-\d{2}-\d{2})<\/td>/i',
];
$checkDate = '';
foreach ($datePatterns as $pattern) {
if (preg_match($pattern, $html, $matches)) {
$checkDate = trim(strip_tags($matches[1]));
if (!empty($checkDate)) break;
}
}
if (!empty($icp) || !empty($owner) || !empty($siteName)) {
return [
'domain' => $domain,
'icp' => $icp ?: 'N/A',
'owner' => $owner ?: 'N/A',
'siteName' => $siteName ?: 'N/A',
'checkDate' => $checkDate ?: 'N/A',
'source' => 'aizhan.com'
];
}
return null;
/**
* 解析aizhan.com返回的ICP数据
*/
function parseICPData($html, $domain) {
return parseICPFromHTML($html, $domain);
}
/**
* 解析beianx.com返回的数据
*/
function parseBeianxData($html, $domain) {
$html = preg_replace('/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/i', '', $html);
$html = preg_replace('/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/i', '', $html);
// 提取ICP编号 - 多种格式
$icpPatterns = [
'/[\d\u4e00-\u9fa5]+-ICP-\d{8}/iu',
'/ICP[\u4e00-\u9fa5]?\d{8,}/iu',
'/>([^<]*ICP[^<]*?)\</i',
];
$icp = '';
foreach ($icpPatterns as $pattern) {
if (preg_match($pattern, $html, $matches)) {
$icp = trim(isset($matches[1]) ? $matches[1] : $matches[0]);
if (!empty($icp)) break;
}
}
// 从表格中提取信息
$owner = extractTableValue($html, '主办单位');
if (empty($owner)) {
$owner = extractTableValue($html, '单位');
}
$siteName = extractTableValue($html, '网站名称');
if (empty($siteName)) {
$siteName = extractTableValue($html, '名称');
}
$checkDate = extractTableValue($html, '审核时间');
if (empty($checkDate)) {
$checkDate = extractTableValue($html, '时间');
}
if (!empty($icp) || !empty($owner) || !empty($siteName)) {
return [
'domain' => $domain,
'icp' => $icp ?: 'N/A',
'owner' => $owner ?: 'N/A',
'siteName' => $siteName ?: 'N/A',
'checkDate' => $checkDate ?: 'N/A',
'source' => 'beianx.com'
];
}
return null;
return parseICPFromHTML($html, $domain);
}
/**
* 从HTML表格中提取指定标签的值
*/
function extractTableValue($html, $label) {
$pattern = '/' . preg_quote($label) . '[^<]*?<[^>]*>([^<]+)<[^>]*>/is';
if (preg_match($pattern, $html, $matches)) {
return trim($matches[1]);
}
return '';
return extractFromHTML($html, $label);
}