IDN 与同形异义字分析 API API 参考
转换 Punycode 与 Unicode 域名,并检测外观相似的字符。 使用此参考选择操作,并集成其文档化的响应契约。
操作
GET /v1/idn
GET
/v1/idn
积分: 1
查询参数
| 参数 | 类型 | 必需 |
|---|---|---|
| domain | string | 必需 |
响应字段
| 字段 | 类型 |
|---|---|
input |
string |
outcome |
string |
unicode |
string |
ascii |
string |
is_idn |
boolean |
valid |
boolean |
errors[] |
string[] |
labels[] |
object[] |
labels[] |
object |
labels[].unicode |
string |
labels[].ascii |
string |
labels[].is_idn |
boolean |
labels[].scripts[] |
string[] |
labels[].mixed_script |
boolean |
labels[].has_invisible |
boolean |
labels[].confusable_characters[] |
object[] |
labels[].confusable_characters[] |
object |
labels[].confusable_characters[].char |
string |
labels[].confusable_characters[].codepoint |
string |
labels[].confusable_characters[].script |
string |
labels[].confusable_characters[].looks_like |
string |
skeleton |
string |
risk |
object |
risk.level |
string |
risk.reasons[] |
string[] |
tld |
object |
tld.label |
string |
tld.ascii |
string |
tld.is_idn |
boolean |
checked_at |
string |
caveats[] |
string[] |
请求示例
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/idn?domain=xn--80ak6aa92e.com"const response = await fetch("https://domscan.net/v1/idn?domain=xn--80ak6aa92e.com", {
headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);import os
import requests
response = requests.get(
"https://domscan.net/v1/idn?domain=xn--80ak6aa92e.com",
headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/idn?domain=xn--80ak6aa92e.com", nil)
if err != nil {
panic(err)
}
req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(resp.Status, string(data))
}require "json"
require "net/http"
uri = URI("https://domscan.net/v1/idn?domain=xn--80ak6aa92e.com")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))响应示例
{
"input": "xn--80ak6aa92e.com",
"outcome": "analyzed",
"unicode": "аррӏе.com",
"ascii": "xn--80ak6aa92e.com",
"is_idn": true,
"valid": true,
"errors": [],
"labels": [
{
"unicode": "аррӏе",
"ascii": "xn--80ak6aa92e",
"is_idn": true,
"scripts": [
"Cyrillic"
],
"mixed_script": false,
"has_invisible": false,
"confusable_characters": [
{
"char": "а",
"codepoint": "U+0430",
"script": "Cyrillic",
"looks_like": "a"
},
{
"char": "р",
"codepoint": "U+0440",
"script": "Cyrillic",
"looks_like": "p"
},
{
"char": "р",
"codepoint": "U+0440",
"script": "Cyrillic",
"looks_like": "p"
},
{
"char": "ӏ",
"codepoint": "U+04CF",
"script": "Cyrillic",
"looks_like": "l"
},
{
"char": "е",
"codepoint": "U+0435",
"script": "Cyrillic",
"looks_like": "e"
}
]
},
{
"unicode": "com",
"ascii": "com",
"is_idn": false,
"scripts": [
"Latin"
],
"mixed_script": false,
"has_invisible": false,
"confusable_characters": []
}
],
"skeleton": "apple.com",
"risk": {
"level": "high",
"reasons": [
"whole_script_confusable",
"idn_label"
]
},
"tld": {
"label": "com",
"ascii": "com",
"is_idn": false
},
"checked_at": "2026-10-09T10:15:30.000Z",
"caveats": [
"partial_confusable_table"
]
}
HTTP 状态码
200成功400请求错误401未授权402需要付款429请求过多