From d7177eaaccbf79de73411390adbfa2ad1d5312fd Mon Sep 17 00:00:00 2001 From: muzihuaner Date: Wed, 18 Mar 2026 13:30:41 +0800 Subject: [PATCH] gx --- api/icp/index.php | 213 ++++++++++++++++++---------------------------- 1 file changed, 85 insertions(+), 128 deletions(-) diff --git a/api/icp/index.php b/api/icp/index.php index 9cf5ffa..8b11b6b 100644 --- a/api/icp/index.php +++ b/api/icp/index.php @@ -1,14 +1,4 @@ - $domain, - 'icp' => $data['icp'] ?? 'N/A', + 'icp' => $data['icp'], 'owner' => $data['organizer'] ?? $data['owner'] ?? 'N/A', 'siteName' => $data['website_name'] ?? $data['name'] ?? 'N/A', 'checkDate' => $data['check_date'] ?? $data['approve_date'] ?? 'N/A', @@ -105,40 +102,19 @@ function queryICP($domain) { } } - // 方法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') { + // 方法2: 使用爱站网API + $apiurl2 = "https://tools.zhuaxia.com/icp?domain=" . urlencode($domain); + $data2 = callApi($apiurl2); + if ($data2 && is_array($data2) && isset($data2['data'])) { + $icpData = $data2['data']; + $icp = $icpData['icp'] ?? ''; + if (!empty($icp) && $icp !== 'N/A') { $result['status'] = 'success'; $result['code'] = 200; $result['message'] = '查询成功'; $result['data'] = [ 'domain' => $domain, - 'icp' => $parsedIcp, + 'icp' => $icp, 'owner' => $icpData['unitname'] ?? $icpData['owner'] ?? 'N/A', 'siteName' => $icpData['sitename'] ?? $icpData['name'] ?? 'N/A', 'checkDate' => $icpData['checkdate'] ?? $icpData['time'] ?? 'N/A', @@ -148,71 +124,71 @@ function queryICP($domain) { } } - // 方法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)) { + // 方法3: 使用网格API (chaxun) + $apiurl3 = "https://www.chaxun.15600.net/service.php?domain=" . urlencode($domain); + $data3 = callApi($apiurl3); + if ($data3 && is_array($data3)) { + $icpNum = $data3['ICP'] ?? $data3['icp'] ?? ''; + if (!empty($icpNum) && $icpNum !== 'N/A') { $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', + 'owner' => $data3['company'] ?? $data3['owner'] ?? 'N/A', + 'siteName' => $data3['websitename'] ?? $data3['name'] ?? 'N/A', + 'checkDate' => $data3['checkTime'] ?? $data3['time'] ?? '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; - } + // 方法4: 使用AllOrigins代理通过爱站网查询 + $proxyUrl = "https://api.allorigins.win/get?url=" . urlencode("http://icp.aizhan.com/index.php?domain=" . urlencode($domain)); + $data4 = callApi($proxyUrl); + if ($data4 && isset($data4['contents'])) { + $htmlData = $data4['contents']; + $parsedData = parseICPFromHTML($htmlData, $domain); + if ($parsedData && isset($parsedData['icp']) && $parsedData['icp'] !== 'N/A') { + return [ + 'status' => 'success', + 'code' => 200, + 'message' => '查询成功', + 'domain' => $domain, + 'data' => $parsedData + ]; } } - // 如果都失败,返回默认的未备案状态 + // 方法5: 直接查询爱站网 (HTTP) + $apiurl5 = "http://icp.aizhan.com/index.php?domain=" . urlencode($domain); + $htmlData = callApi($apiurl5, false); + if ($htmlData && strlen($htmlData) > 100) { + $parsedData = parseICPFromHTML($htmlData, $domain); + if ($parsedData && isset($parsedData['icp']) && $parsedData['icp'] !== 'N/A') { + return [ + 'status' => 'success', + 'code' => 200, + 'message' => '查询成功', + 'domain' => $domain, + 'data' => $parsedData + ]; + } + } + + // 都失败返回未备案 $result['status'] = 'not_found'; $result['code'] = 404; - $result['message'] = '未找到ICP备案信息(该域名可能未在中国备案或查询源暂时不可用)'; + $result['message'] = '未找到ICP备案信息(该域名可能未在中国备案)'; } catch (Exception $e) { - $result['message'] = '查询异常: ' . $e->getMessage(); + $result['status'] = 'error'; + $result['code'] = 500; + $result['message'] = 'API异常: ' . $e->getMessage(); } - return $result; -} - - return $result; } /** @@ -223,19 +199,14 @@ function callApi($url, $isJson = true) { $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_TIMEOUT, 8); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4); + curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/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_MAXREDIRS, 2); 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); @@ -260,42 +231,49 @@ function callApi($url, $isJson = true) { */ function extractFromHTML($html, $label) { $patterns = [ - '/' . preg_quote($label) . '[^>]*>([^<]+)<', - '/]*>' . preg_quote($label) . '<\/th>\s*]*>([^<]+)<\/td>/', + '/' . preg_quote($label) . '[^>]*>([^<]+)]*>' . preg_quote($label) . '<\/td>\s*]*>([^<]+)<\/td>/', + '/]*>' . preg_quote($label) . '<\/th>\s*]*>([^<]+)<\/td>/', ]; foreach ($patterns as $pattern) { if (preg_match($pattern, $html, $matches)) { - return trim(strip_tags($matches[1])); + $value = trim(strip_tags($matches[1])); + if (!empty($value)) { + return $value; + } } } return 'N/A'; } /** - * 改进的ICP HTML解析函数 + * 从HTML解析ICP信息 */ function parseICPFromHTML($html, $domain) { + // 清理HTML $html = preg_replace('/)<[^<]*)*<\/script>/i', '', $html); $html = preg_replace('/)<[^<]*)*<\/style>/i', '', $html); - // 提取ICP编号 + // 提取ICP编号 - 多种格式 $icpPatterns = [ '/[\d\u4e00-\u9fa5]+-ICP-\d{8,}/u', '/ICP[\u4e00-\u9fa5]?\d{8,}/u', '/ICP\d{8,}/u', ]; - $icp = 'N/A'; + + $icp = ''; foreach ($icpPatterns as $pattern) { if (preg_match($pattern, $html, $matches)) { $icp = trim($matches[0]); - break; + if (!empty($icp)) { + break; + } } } - // 如果没有找到有效的ICP,返回null - if ($icp === 'N/A' || empty($icp)) { + // 如果没有找到ICP号,返回null + if (empty($icp) || $icp === 'N/A') { return null; } @@ -312,25 +290,4 @@ function parseICPFromHTML($html, $domain) { 'source' => 'html-parse' ]; } - -/** - * 解析aizhan.com返回的ICP数据 - */ -function parseICPData($html, $domain) { - return parseICPFromHTML($html, $domain); -} - -/** - * 解析beianx.com返回的数据 - */ -function parseBeianxData($html, $domain) { - return parseICPFromHTML($html, $domain); -} - -/** - * 从HTML表格中提取指定标签的值 - */ -function extractTableValue($html, $label) { - return extractFromHTML($html, $label); -} - +?>