'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 $apiurl = "https://www.api.vat.tools/query?domain=" . urlencode($domain); $data = callApi($apiurl); 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: 使用ICP查询-接口-通用API $apiurl2 = "https://api.search.naver.com/search.naver?query=" . urlencode($domain) . "&where=web"; // 方法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['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'] = '查询成功'; $result['data'] = $parsedData; return $result; } } // 方法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'] = [ '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备案信息(该域名可能未在中国备案或查询源暂时不可用)'; } catch (Exception $e) { $result['message'] = '查询异常: ' . $e->getMessage(); } return $result; } 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); 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); curl_close($ch); if ($httpCode !== 200 || empty($response)) { return null; } if ($isJson) { return json_decode($response, true); } return $response; } catch (Exception $e) { return null; } } /** * 从HTML中提取指定字段的值 */ function extractFromHTML($html, $label) { $patterns = [ '/' . preg_quote($label) . '[^>]*>([^<]+)<', '/