ICP备案信息查询
接口说明
根据域名、公司名称、备案号等查询ICP备案信息。 返回信息主要包括:网站域名、主办单位名称、主办单位性质、审核通过日期、服务前置审批项、ICP备案主体信息ICP备案/许可证号、ICP备案服务信息ICP备案/许可证号等。
请求地址
https://api.f.360.cn/domains/std/v1/icp_data/:key_type/:val/
请求方法
GET
请求参数
| 参数名 | 类型 | 位置 | 是否必填 | 示例值 | 说明 |
|---|---|---|---|---|---|
| key_type | String | path | 是 | domain | 查询类型(domain/srname/name/record_id) |
| val | String | path | 是 | baidu.com | 查询值 |
| limit | Int | query | 否 | 10 | 返回条数,默认1000 |
响应参数
| 名称 | 类型 | 示例值 | 描述 |
|---|---|---|---|
| status | string | ok | 状态 |
| code | number | 200 | 状态码 |
| data | Array(object) | 见下方示例 | ICP记录列表 |
| data[].domain | string | baidu.com | 网站域名 |
| data[].reg_name | string | 北京百度网讯科技有限公司 | 主办单位名称 |
| data[].category | string | 企业 | 主办单位性质(企业、个人等) |
| data[].record_ID | string | 京ICP证030173号 | ICP备案主体许可证号 |
| data[].record_ID_NO | string | 京ICP证030173号-1 | ICP备案服务许可证号 |
| data[].site_content | string | - | 服务前置审批项 |
| data[].OPER | string | A | 是否有效(A-有效,D-无效) |
| data[].bat | boolean | false | 是否批量注册 |
| data[].site_name | string | \N | 网站名称 |
| data[].site_url | string | \N | 网站主页 |
| data[].create_time | string | 2020-09-13 14:37:38 | 创建时间 |
| data[].update_time | string | 2023-11-19 19:11:02 | 更新时间 |
| data[].insert_time | number | 1700420409 | 入库时间 |
| data[].check_date | string | 2023-11-15 10:38:56 | 审核通过日期 |
请求示例
支持cUrl、Python、Java、PHP、Go语言的请求,示例如下
#!/usr/bin/env bash
set -euo pipefail
APPID="" # apikey
SECRET="" # salt
URL="https://api.f.360.cn/domains/std/v1/icp_data/domain/baidu.com/?limit=1000"
BODY=""
NONCE=$(printf '%08d' $((RANDOM % 100000000)))
TIMESTAMP=$(date +%s)
BODY_MD5=$(printf '%s' "$BODY" | openssl dgst -md5 -hex | awk '{print $NF}')
SIGNATURE=$(printf '%s' "${BODY_MD5}${APPID}${NONCE}${TIMESTAMP}${SECRET}" | openssl dgst -md5 -hex | awk '{print $NF}')
SIGNATURE=${SIGNATURE:16}
curl --location --request GET "$URL" \
--header "Content-Type: application/json" \
--header "X-360-Key: ${APPID}" \
--header "X-360-Nonce: ${NONCE}" \
--header "X-360-Timestamp: ${TIMESTAMP}" \
--header "X-360-Signature: ${SIGNATURE}"#-*- coding:utf-8 -*—
import requests
import json
import random
import hashlib
import time
APPID = "" # apikey
SECRET = "" # salt
def make_headers(appid, secret, body=""):
headers = {}
headers["X-360-Key"] = appid
headers["X-360-Nonce"] = str(random.randint(0,99999999)).zfill(8)
headers["X-360-Timestamp"] = str(int(time.time()))
s = hashlib.md5(body.encode("utf8")).hexdigest() + headers["X-360-Key"] + headers["X-360-Nonce"] + headers["X-360-Timestamp"] + secret
md5 = hashlib.md5(s.encode("utf8")).hexdigest()
headers["X-360-Signature"] = md5[16:]
headers["Content-Type"] = "application/json"
return headers
def do_get(url, params):
res = requests.get(url, headers=make_headers(APPID, SECRET), params=params)
print(res.text)
if __name__ == '__main__':
url = "https://api.f.360.cn/domains/std/v1/icp_data/domain/baidu.com/"
params = {
'limit': 1000
}
do_get(url, params)import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.concurrent.ThreadLocalRandom;
public class Demo {
static String md5(String input) throws Exception {
byte[] digest = MessageDigest.getInstance("MD5")
.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
String appid = ""; // apikey
String secret = ""; // salt
String url = "https://api.f.360.cn/domains/std/v1/icp_data/domain/baidu.com/?limit=1000";
String body = "";
String nonce = String.format("%08d", ThreadLocalRandom.current().nextInt(100000000));
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
String signature = md5(md5(body) + appid + nonce + timestamp + secret).substring(16);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("X-360-Key", appid)
.header("X-360-Nonce", nonce)
.header("X-360-Timestamp", timestamp)
.header("X-360-Signature", signature)
.GET()
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
System.out.println(response.body());
}
}<?php
// apikey
$appid = "";
// salt
$secret = "";
$url = 'https://api.f.360.cn/domains/std/v1/icp_data/domain/baidu.com/?limit=1000';
$body = "";
$nonce = str_pad((string) random_int(0, 99999999), 8, "0", STR_PAD_LEFT);
$timestamp = (string) time();
$signature = substr(md5(md5($body) . $appid . $nonce . $timestamp . $secret), 16);
$ch = curl_init($url);
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-360-Key: {$appid}",
"X-360-Nonce: {$nonce}",
"X-360-Timestamp: {$timestamp}",
"X-360-Signature: {$signature}",
],
];
$options[CURLOPT_HTTPGET] = true;
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if ($response === false) {
echo curl_error($ch), PHP_EOL;
} else {
echo $response, PHP_EOL;
}
curl_close($ch);package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"math/rand"
"net/http"
"time"
)
func md5Hex(s string) string {
sum := md5.Sum([]byte(s))
return hex.EncodeToString(sum[:])
}
func main() {
appid := "" // apikey
secret := "" // salt
url := "https://api.f.360.cn/domains/std/v1/icp_data/domain/baidu.com/?limit=1000"
body := []byte("")
nonce := fmt.Sprintf("%08d", rand.Intn(100000000))
timestamp := fmt.Sprintf("%d", time.Now().Unix())
signature := md5Hex(md5Hex(string(body)) + appid + nonce + timestamp + secret)[16:]
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-360-Key", appid)
req.Header.Set("X-360-Nonce", nonce)
req.Header.Set("X-360-Timestamp", timestamp)
req.Header.Set("X-360-Signature", signature)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
respBody, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(respBody))
}响应示例
{
"status": "ok",
"code": 200,
"data": [
{
"OPER": "A",
"category": "企业",
"domain": "baidu.com",
"site_name": "\\N",
"reg_name": "北京百度网讯科技有限公司",
"bat": false,
"site_url": "\\N",
"update_time": "2023-11-19 19:11:02",
"create_time": "2020-09-13 14:37:38",
"insert_time": 1700420409,
"record_ID": "京ICP证030173号",
"check_date": "2023-11-15 10:38:56",
"record_ID_NO": "京ICP证030173号-1"
}
]
}