на основеEdgeOne
Реализовано функцией краяIPИнтерфейс запроса информации,полностью использованEdgeOne
выполнить,Не полагается на другие сторонние API.
Недавно я возился с DDNS.,Привяжите доменное имя к домашнему NAS. Найдите скрипт DDNS, который я написал ранее.,Было обнаружено, что используемый в то время общедоступный интерфейс получения IP-адресов был недействителен.,Приготовьтесь развертывать один за другим. Так получилось, что у EdgeOne было мероприятие, и я купил его на год.,Затем я попытался использовать собственную пограничную функцию для реализации интерфейса запроса информации об IP.
Краевая функция EdgeOne Request Объект имеет eo свойство,из которых GeoProperties Параметры могут предоставлять информацию о запрошенном IP-адресе.
Атрибут headers хранит информацию заголовка запроса, из которой можно получить информацию UA и информацию Accept.
В сочетании с информацией о пути, хранящейся в атрибуте url, указанный результат может быть возвращен на основе пути.
Запускайте правила, устанавливая,Все еще в состояниивыполнить Добавьте это на существующий сайт Функция(Например, доступ/ip
Можно запроситьipинформация,Другие пути возвращаются на исходную станцию)
async function handleRequest(request) {
// Создайте пустой объект для хранения данных заголовка запроса.
const headers = {}
// Перебрать данные заголовка запроса и сохранить их в объекте.
for (const [name, value] of request.headers.entries()) {
headers[name] = value
}
const url = new URL(request.url);
const path = url.pathname;
// Данные, используемые для возврата
let returnData = {}
// IP-адрес клиента
returnData["ip"] = headers["EO-Client-IP"];
// клиентUA
returnData["user-agent"] = headers["User-Agent"];
if(returnData["user-agent"] === undefined){
returnData["user-agent"] = headers["user-agent"];
}
// Информация, связанная с IP
returnData["geo"] = request.eo.geo;
// самоопределяемая версия программы
returnData["version"] = "0.4";
if(path === "/"){
// Показать справочную информацию
const returnDataStr = "/\t\t\tHelp\n/info\t\t\tALL Info(JSON)\n/ip\t\t\tIP(String)\n/ip/json\t\tIP(Json)\n/ua\t\t\tUser-Agent Data";
return new Response(returnDataStr, {status: 200})
} else if(path === "/ua"){
// браузерua
const returnDataStr = returnData["user-agent"];
return new Response(returnDataStr, {status: 200})
}else if(path === "/info"){
// Преобразование данных заголовка запроса в JSON нить
const returnDataStr = JSON.stringify(returnData);
return new Response(returnDataStr, {status: 200,headers: {'Content-Type':'application/json'}})
}else if(path === "/ip/json"){
// IP-адрес в формате json, с данными региона и ASN
let returnDataTemp ={};
returnDataTemp["ip"] = returnData["ip"];
returnDataTemp["geo"] = returnData["geo"];
// Преобразование данных заголовка запроса в JSON нить
const returnDataStr = JSON.stringify(returnDataTemp)
return new Response(returnDataStr, {status: 200,заголовки: {'Content-Type':'application/json'}})
}иначе если(путь === "/ip"){
// чистый IP-адрес
const returnDataStr = returnData["ip"];
вернуть новый ответ (returnDataStr, {status: 200})
}else if(path === "/favicon.ico"){
// Ответ значка браузера 200
return new Response("", {status: 200})
}else{
return new Response("404", {status: 404})
}
}
addEventListener('fetch', event => {
return event.respondWith(handleRequest(event.request));
});
Поскольку запрос обрабатывается пограничной функцией, исходный IP-адрес или имя домена можно указать случайно.
Пропустите рекомендуемую конфигурацию на втором этапе напрямую.
Затем запишите информацию о конфигурации CNAME, предоставленную на третьем шаге.
Добавьте разрешение к своему провайдеру DNS (например, DNSPod)
Как показано на рисунке, войдите на страницу управления функциями, чтобы добавить функции.
Поместите приведенный выше код в черный ящик и нажмите «Создать и развернуть» внизу страницы.
развертывать Будет всплывающее окно,Нажмите Создайте новое триггерное правило
Поскольку у нас нет сервера, мы хотим передавать все запросы на обработку облачной функции, поэтому мы можем просто установить HOST напрямую.
Установите HOST на только что привязанное доменное имя и нажмите «ОК».
Нажмите Оптимизация сети->ускорение сайта
Откройте следующие две функции
Настройки заголовка IP-запроса следующие:
IP-адрес клиента地理位置头部
开不开都没关系,Не требуется
Ниже результат после открытия, там только один двузначный код