'error', 'code' => 400, 'message' => '缺少必要参数: domain', 'example' => '/api/icp/index.php?domain=example.com' ], JSON_UNESCAPED_UNICODE); exit; } // 清理域名格式(移除http://或https://) $domain = preg_replace('/^https?:\/\//i', '', $domain); $domain = preg_replace('/\/.*$/', '', $domain); $domain = strtolower(trim($domain)); // 验证域名格式 if (!preg_match('/^([a-z0-9]([a-z0-9\-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i', $domain)) { http_response_code(400); echo json_encode([ 'status' => 'error', 'code' => 400, 'message' => '无效的域名格式', 'domain' => $domain ], JSON_UNESCAPED_UNICODE); exit; } // 查询ICP信息 $result = queryICP($domain); // 根据type参数返回不同格式 if ($type === 'text') { header('Content-Type: text/plain; charset=utf-8'); if ($result['status'] === 'success') { echo "域名: " . $result['data']['domain'] . "\n"; echo "主办单位: " . $result['data']['owner'] . "\n"; echo "ICP编号: " . $result['data']['icp'] . "\n"; echo "审核时间: " . $result['data']['checkDate'] . "\n"; echo "网站名称: " . $result['data']['siteName'] . "\n"; } else { echo "查询失败: " . $result['message']; } } else { echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); } /** * 查询ICP信息 * @param string $domain 域名 * @return array 返回结果数组 */ function queryICP($domain) { $result = [ 'status' => 'error', 'code' => 500, 'message' => '查询失败', 'domain' => $domain, 'data' => null ]; try { // 方法1: 使用API Vat接口(返回JSON格式) $apiurl = "https://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; } // 方法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; } // 方法3: 使用免费ICP API $apiurl3 = "https://ijscode.top/api/icp.php?url=" . 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) { $result['status'] = 'success'; $result['code'] = 200; $result['message'] = '查询成功'; $result['data'] = $parsedData; return $result; } } // 方法5: 备用API - ICP查询 $backupUrl = "https://www.beianx.com/search/?q=" . urlencode($domain); $htmlResponse = callApi($backupUrl, false); if ($htmlResponse) { $backupData = parseBeianxData($htmlResponse, $domain); if ($backupData) { $result['status'] = 'success'; $result['code'] = 200; $result['message'] = '查询成功'; $result['data'] = $backupData; return $result; } } // 如果都失败,返回默认的未备案状态 $result['status'] = 'not_found'; $result['code'] = 404; $result['message'] = '未找到ICP备案信息(该域名可能未在中国备案或各查询源暂时不可用)'; } catch (Exception $e) { $result['message'] = '查询异常: ' . $e->getMessage(); } return $result; } /** * 通用HTTP调用函数 */ function callApi($url, $isJson = true) { try { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 3); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curlError = curl_error($ch); curl_close($ch); if ($httpCode !== 200 || empty($response)) { return null; } if ($isJson) { return json_decode($response, true); } return $response; } catch (Exception $e) { return null; } } /** * 解析aizhan.com返回的ICP数据 */ function parseICPData($html, $domain) { // 移除脚本和样式 $html = preg_replace('/)<[^<]*)*<\/script>/i', '', $html); $html = preg_replace('/)<[^<]*)*<\/style>/i', '', $html); // 提取ICP编号 - 多种格式支持 $icpPatterns = [ '/[\d\u4e00-\u9fa5]+-ICP-\d{8}/iu', // 原格式 '/ICP[\u4e00-\u9fa5]?\d{8,}/iu', // 新格式 '/[\d]{8}\|[\d]{8}/u', // 竖线格式 ]; $icp = ''; foreach ($icpPatterns as $pattern) { if (preg_match($pattern, $html, $matches)) { $icp = $matches[0]; break; } } // 提取主办单位 - 多种选择器 $ownerPatterns = [ '/>([^<]*?单位[^<]*?)]*>([^<]+)]*>([^<]*?单位[^<]*?)<\/td>/i', ]; $owner = ''; foreach ($ownerPatterns as $pattern) { if (preg_match($pattern, $html, $matches)) { $owner = trim(strip_tags($matches[1])); if (!empty($owner)) break; } } // 提取网站名称 $siteNamePatterns = [ '/网站名称[^>]*>([^<]+)]*>网站名称<\/td>\s*]*>([^<]+)]*>([^<]+)]*>([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; } /** * 解析beianx.com返回的数据 */ function parseBeianxData($html, $domain) { $html = preg_replace('/)<[^<]*)*<\/script>/i', '', $html); $html = preg_replace('/)<[^<]*)*<\/style>/i', '', $html); // 提取ICP编号 - 多种格式 $icpPatterns = [ '/[\d\u4e00-\u9fa5]+-ICP-\d{8}/iu', '/ICP[\u4e00-\u9fa5]?\d{8,}/iu', '/>([^<]*ICP[^<]*?)\ $domain, 'icp' => $icp ?: 'N/A', 'owner' => $owner ?: 'N/A', 'siteName' => $siteName ?: 'N/A', 'checkDate' => $checkDate ?: 'N/A', 'source' => 'beianx.com' ]; } return null; } /** * 从HTML表格中提取指定标签的值 */ function extractTableValue($html, $label) { $pattern = '/' . preg_quote($label) . '[^<]*?<[^>]*>([^<]+)<[^>]*>/is'; if (preg_match($pattern, $html, $matches)) { return trim($matches[1]); } return ''; }