
Класс Uri в Dart имеет хорошую документацию, но иногда просмотр примеров упрощает понимание. В этой статье будут показаны примеры для всех основных параметров, чтобы сделать их более понятными.
Создание URI
Вы можете создать Uri, проанализировав строку следующим образом:
Uri uri = Uri.parse('http://www.example.com');
В следующих примерах будет ссылка на uri, но я опущу строку выше для экономии места. Каждый пример будет начинаться со строки URL, которую нужно проанализировать.
Свойства Ури
схема
Схема выглядит примерно так: http, https или file. Есть намного больше.
http://www.example.com String scheme = uri.scheme; print(scheme); // http
орган власти
Авторитетом в URL-адресе обычно является основной веб-сайт без схемы, пути или чего-либо еще.
http://www.example.com/bananas String authority = uri.authority; print(authority); // www.example.com
Однако обратите внимание, что полномочия также могут включать информацию о пользователе и порт:
http://user:[email protected]:8080/bananas String authority = uri.authority; print(authority); // user:[email protected]:8080
userInfo
Это информация о пользователе.
http://user:password@www.example.com String userInfo = uri.userInfo; print(userInfo); // user:password
Не помещайте пароли в URI в виде обычного текста. Это угроза безопасности, и она также устарела.
хозяин
В то время как полномочия могут включать информацию о пользователе и порт, хост - нет.
http://user:password@www.example.com:8080 String host = uri.host; print(host); // www.example.com
порт
Это число, которое следует после двоеточия после имени хоста.
http://www.example.com:8080 int port = uri.port; print(port); // 8080
дорожка
Это адрес какого-то ресурса после авторитета.
http://www.example.com/fruit/bananas String path = uri.path; print(path); // /fruit/bananas
pathSegments
Путь часто состоит из нескольких сегментов, поэтому вместо того, чтобы разбирать их самостоятельно, вы можете получить их в виде следующего списка:
http://www.example.com/fruit/bananas List<String> pathSegments = uri.pathSegments; print(pathSegments); // [fruit, bananas]
запрос
Это часть, которая идет после ?.
http://www.example.com/fruit?q=yellow String query = uri.query; print(query); // q=yellow
Обратите внимание, что он закодирован в URL (см. %20):
http://www.example.com/fruit?q=yellow&size=very%20big String query = uri.query; print(query); // q=yellow&size=very%20big
queryParameters
Это декодирует параметры запроса и возвращает карту пар ключ-значение:
http://www.example.com/fruit?q=yellow&size=very%20big
Map<String, String> queryParameters = uri.queryParameters;
print(queryParameters); // {q: yellow, size: very big}
queryParametersAll
Вы можете использовать это для сбора нескольких параметров запроса с одним и тем же ключом. Например, следующий URI имеет один user с именем bob и другой user с именем mary.
http://www.example.com/fruit?user=bob&user=mary&job=doctor
Map<String, List<String>> all = uri.queryParametersAll;
print(all); // {user: [bob, mary], job: [doctor]}
Если бы вы использовали только queryParameters, то повторяющиеся ключи были бы отброшены:
http://www.example.com/fruit?user=bob&user=mary&job=doctor
Map<String, String> queryParameters = uri.queryParameters;
print(queryParameters); // {user: mary, job: doctor}
фрагмент
Это часть, которая идет после #, также называемая привязкой для ссылки на контент на странице.
http://www.example.com/fruit#bananas String fragment = uri.fragment; print(fragment); // bananas
Заключение
Понимание компонентов URI упрощает анализ. Это особенно полезно при создании сервера.
Полный код
Хотите поиграться с этим сами? Начни здесь:
void main() async {
final uri = Uri.parse('http://[email protected]:8080/fruit/bananas?q=ripe');
final value = uri.scheme;
print(value);
}
Смотрите также
- RFC 3986 (техническое определение URI)
- Создание сервера Dart с нуля