Глубокие ссылки
Используйте глубокие ссылки throne:// для добавления подписок, обмена профилями и импорта профилей маршрутизации одним щелчком.
Throne регистрирует в вашей операционной системе собственную URL-схему throne://. Глубокая ссылка — это просто URL вида throne://, который указывает запущенному (или ещё не запущенному) экземпляру Throne выполнить действие — например, добавить подписку или импортировать профиль маршрутизации — без необходимости вручную вводить значения в диалоговых окнах.
Это удобно для сайтов провайдеров, страниц поддержки, QR-кодов, скриптов или просто для того, чтобы поделиться профилем маршрутизации с другом.
Ссылки, добавляющие подписку или профиль маршрутизации, сначала запрашивают подтверждение: Throne показывает, что именно будет добавлено, и ждёт вашего согласия. Единственное исключение — команда
add: она без запроса добавляет один профиль прокси прямо в текущую группу, точно так же, как вставка ссылкиvless://.
Как Throne получает глубокую ссылку
Схема throne:// регистрируется автоматически при первом запуске Throne в Windows, Linux и macOS. Поскольку Throne поставляется в виде переносимого архива без установщика, регистрация выполняется при запуске, не требует прав администратора и восстанавливается автоматически, если вы переместите или обновите папку приложения.
После регистрации Throne принимает глубокую ссылку из любого из этих источников:
- Щелчок по ссылке
throne://в браузере, мессенджере или документе — ОС передаёт её в Throne. Программа(Program) →Добавить профиль из буфера обмена(Add profile from clipboard) — этот пункт есть и в менюСервер(Server), горячая клавишаCtrl+V; он считывает ссылку из буфера обмена.- Перетаскивание текста ссылки в главное окно.
- Передача в качестве аргумента запуска в командной строке (Windows/Linux). В macOS система передаёт URL напрямую уже запущенному приложению.
Если Throne уже открыт, ссылка передаётся существующему окну, а не запускает второй экземпляр.
Формат ссылки
Все глубокие ссылки устроены одинаково — команда, косая черта и полезная нагрузка в Base64:
throne://<command>/<base64_payload>
- Команда не зависит от регистра (
throne://AddSub/...иthrone://addsub/...— одно и то же). - Косая черта и полезная нагрузка обязательны. Ссылка без
/<payload>после команды отбрасывается молча — ничего не происходит и ничего не пишется в журнал. - Параметров запроса нет. Всё, что несёт ссылка, находится внутри полезной нагрузки Base64.
| Команда | Назначение | Запрашивает подтверждение? |
|---|---|---|
addsub | Добавить группу подписки и сразу обновить её | Да |
route | Импортировать профиль маршрутизации, вложенный в ссылку | Да |
remoteroute | Добавить один или несколько удалённых профилей маршрутизации по URL | Да |
add | Добавить один профиль прокси в текущую группу | Нет |
Нераспознанная команда игнорируется и отмечается в журнале как Ignored deeplink with unknown command.
Какой алфавит Base64 использовать
Это важно, и для разных команд требования отличаются:
| Команда | Допустимая кодировка |
|---|---|
addsub | Только стандартный Base64 (алфавит с + и /). Сохраняйте заполнение =. |
remoteroute | Только стандартный Base64 (алфавит с + и /). Сохраняйте заполнение =. |
route | URL-безопасный Base64, стандартный Base64 или даже обычный незакодированный JSON. |
add | Создаётся самим Throne — см. add ниже. |
Для addsub и remoteroute URL-безопасная нагрузка, содержащая - или _, не декодируется, и ссылка будет отклонена. Кодируйте стандартным алфавитом.
addsub — Добавление подписки
Добавляет новую группу подписки и сразу же обновляет её.
throne://addsub/<base64>
Полезная нагрузка — это Base64 одной строки:
<subscription_url>[#<group_name>]
| Часть | Обязательно | Описание |
|---|---|---|
<subscription_url> | Да | URL подписки. |
#<group_name> | Нет | Имя новой группы, записанное как фрагмент URL. Если опущено, используется хост URL подписки. |
Автообновление не является частью ссылки. Throne спрашивает о нём в диалоге подтверждения, и флажок Auto update по умолчанию установлен.
Пример
Чтобы добавить https://example.com/sub/abc123 как группу с именем MyProvider, закодируйте в Base64 строку:
https://example.com/sub/abc123#MyProvider
и используйте результат как полезную нагрузку:
throne://addsub/aHR0cHM6Ly9leGFtcGxlLmNvbS9zdWIvYWJjMTIzI015UHJvdmlkZXI=
Throne попросит подтверждение:
Добавить эту подписку?
Имя: MyProvider URL: https://example.com/sub/abc123
☑ Автообновление
После подтверждения группа создаётся, и подписка загружается немедленно.
Поскольку всё целиком кодируется в Base64, URL подписки не нужно кодировать процентами — его символы
?,&и/надёжно скрыты внутри полезной нагрузки. А вот имя группы стоит закодировать процентами, если в нём есть пробелы или другие специальные символы (пробел становится%20).
route — Импорт профиля маршрутизации
Импортирует полный профиль маршрутизации (исходящее соединение по умолчанию плюс правила), вложенный в ссылку.
throne://route/<base64>
Полезная нагрузка — профиль маршрутизации, закодированный в Base64. Сам Throne создаёт URL-безопасный Base64 (с заполнением или без); стандартный Base64 и обычный незакодированный JSON также принимаются.
Как создать ссылку route
Обычно такие ссылки не составляют вручную — Throne создаёт их за вас:
- Откройте
Меню маршрутизации(Routing Menu) →Настройки маршрутизации(Routing Settings). - Выберите профиль маршрутизации, которым хотите поделиться.
- Нажмите
Ctrl+C(или воспользуйтесь действием экспорта).
Throne скопирует в буфер обмена готовую ссылку вида throne://route/.... Отправьте её кому угодно; когда получатель откроет её (или вставит в Настройках маршрутизации через Ctrl+V, или воспользуется пунктом Добавить профиль из буфера обмена), Throne покажет имя профиля и все примечания, а после подтверждения импортирует его.
Что внутри полезной нагрузки
Base64 декодируется в небольшую JSON-оболочку, описывающую профиль:
{
"kind": "throne-route-profile",
"v": 1,
"name": "Bypass LAN",
"default_outbound": "proxy",
"rules": []
}
Так что ссылка выглядит следующим образом (полезная нагрузка — это Base64 указанного JSON):
throne://route/eyJraW5kIjoidGhyb25lLXJvdXRlLXByb2ZpbGUiLCJ2IjoxLCJuYW1lIjoiQnlwYXNzIExBTiIsImRlZmF1bHRfb3V0Ym91bmQiOiJwcm94eSIsInJ1bGVzIjpbXX0
Профили, созданные из написанной вручную секции route, содержат "raw": true и объект route вместо rules; при импорте Throne заново сопоставляет ссылки на исходящие соединения по имени и сообщает обо всём, что не удалось разрешить.
При импорте из буфера обмена Throne распознаёт ту же полезную нагрузку и в виде обычного JSON, и в виде «голого» Base64, поэтому ссылка, скопированная с другой машины, работает, даже если по пути потеряла префикс
throne://route/. Устаревший простой массив правил тоже принимается — он открывается в редакторе, чтобы вы задали имя и исходящее соединение по умолчанию.
remoteroute — Добавление удалённых профилей маршрутизации
Добавляет один или несколько удалённых профилей маршрутизации по URL. Если route упаковывает целый профиль внутрь ссылки, то remoteroute несёт адреса профилей, размещённых в сети: Throne скачивает правила с каждого URL и, если вы разрешите, автоматически поддерживает их в актуальном состоянии. Именно так провайдер передаёт вам сопровождаемый профиль маршрутизации — он продолжает улучшаться без повторного импорта с вашей стороны.
throne://remoteroute/<base64>
Полезная нагрузка — это Base64 обычного списка URL, разделённых переводами строк, а не JSON:
<profile_url_1>[#<name_1>]
<profile_url_2>[#<name_2>]
...
| Часть | Обязательно | Описание |
|---|---|---|
<profile_url> | Да | Ссылка http:// или https:// на профиль маршрутизации. Строки, не являющиеся корректными http(s)-адресами, пропускаются. |
#<name> | Нет | Отображаемое имя профиля, записанное как фрагмент URL. Если опущено, используется хост URL. |
Автообновление задаётся не для каждой записи отдельно. Throne спрашивает один раз в диалоге подтверждения, и ответ применяется ко всем профилям из ссылки. Флажок Auto update по умолчанию установлен.
Пример
Закодируйте в Base64 этот список из двух строк:
https://example.com/routes/bypass-iran.json#BypassIran
https://example.com/routes/ads.json
и используйте результат как полезную нагрузку:
throne://remoteroute/aHR0cHM6Ly9leGFtcGxlLmNvbS9yb3V0ZXMvYnlwYXNzLWlyYW4uanNvbiNCeXBhc3NJcmFuCmh0dHBzOi8vZXhhbXBsZS5jb20vcm91dGVzL2Fkcy5qc29u
Throne перечислит всё, что добавит ссылка, и дождётся вашего подтверждения:
Добавить эти удалённые профили маршрутизации?
- https://example.com/routes/bypass-iran.json
- https://example.com/routes/ads.json
☑ Автообновление
После подтверждения каждый профиль добавляется и сразу же загружается. Профили с включённым автообновлением затем обновляются в фоне с интервалом Routing profiles auto update из Основных настроек (Basic Settings) (интервал меньше 30 минут отключает обновления).
Каждый удалённый URL должен отдавать профиль маршрутизации в любом виде, который принимает route, — ссылку throne://route/..., её Base64 или необработанный JSON.
add — Добавление одного профиля прокси
Добавляет один профиль прокси в текущую группу из JSON-конфигурации исходящего соединения.
throne://add/<base64>
Полезная нагрузка — Base64 исходящего JSON профиля, того самого объекта, который Throne экспортирует для сервера. В отличие от трёх других команд, эта не запрашивает подтверждение: профиль добавляется прямо в текущую группу, ровно так же, как если бы вы вставили ссылку vless:// или ss://.
Такие ссылки не составляют вручную. Throne создаёт их за вас:
Сервер(Server) →Поделиться(Share) →Copy links of selected (Deep Links)(Ctrl+Alt+C)- Окно «Поделиться»/QR показывает глубокую ссылку рядом с обычной ссылкой для обмена
- Кнопка
Copy profile share links (Deep Links)в редакторе группы
Глубокие ссылки полезны для протоколов и параметров, у которых нет стандартного URL-адреса вида ://, поскольку полная JSON-конфигурация переживает передачу без потерь.
Устранение неполадок
- Щелчок по ссылке ничего не делает / браузер спрашивает, каким приложением её открыть. Запустите Throne один раз, чтобы он зарегистрировал схему, затем попробуйте снова. Если вы переместили папку Throne, просто запустите его ещё раз — регистрация восстанавливается при старте.
- Вообще ничего не происходит, и журнал пуст. Скорее всего, в ссылке нет косой черты и полезной нагрузки после команды (
throne://addsubвместоthrone://addsub/<base64>) либо её Base64 не удалось декодировать. Оба случая отбрасываются молча. - «Ignored deeplink with unknown command». Часть с командой — не
addsub,route,remoterouteилиadd. Проверьте написание слова сразу послеthrone://. - «The link did not contain a subscription URL». Полезная нагрузка
addsubдекодировалась, но перед#не оказалось URL — убедитесь, что вы закодировали<url>#<name>, а не только#<name>. - «Base64 is invalid.» / «Deep link has no data». Полезная нагрузка пуста или не декодируется. Для
addsubиremoterouteубедитесь, что использован стандартный Base64: URL-безопасная нагрузка с-или_отклоняется. - «The link did not contain any valid remote routing profiles». Ни одна из декодированных строк не начинается с
http://илиhttps://. Помните, что полезная нагрузка — это список URL, разделённых переводами строк, а не массив JSON. - «The link could not be parsed». Полезная нагрузка
routeне является корректным JSON, Base64 или ссылкой Throne route — либо это JSON-объект без маркера"kind": "throne-route-profile".