URL URI傻傻分不清楚,dart告诉你该怎么用

简介: URL URI傻傻分不清楚,dart告诉你该怎么用

目录



简介


如果我们要访问一个网站,需要知道这个网站的地址,网站的地址一般被称为URL,他的全称是Uniform Resource Locator。那么什么是URI呢?


URI的全程是Uniform Resource Identifier,也叫做统一资源标志符。


URI用来对资源进行标记,而URL是对网络上的资源进行标记,所以URL是URI的子集。


了解了URI和URL之间的关系之后,我们来看看dart语言对URI的支持。


dart中的URI


dart中为URI创建了一个专门的类叫做Uri:


abstract class Uri


Uri是一个抽象类,他定义了一些对URI的基本操作。它有三个实现类,分别是_Uri,_DataUri和_SimpleUri。


接下来,我们一起来看看,dart中的Uri都可以做什么吧。


encode和decode


为什么要对encode URI?


一般来说URI中可以包含一些特殊字符,像是空格或者中文等等。这些字符在传输中可能不被对方所认识。所以我们需要对Uri进行编码。


但是对于URI中的一些特殊但是有意义的字符,比如: /, :, &, #, 这些是不用被转义的。


所以我们需要一种能够统一编码和解码的方法。


在dart中,这种方法叫做encodeFull() 和 decodeFull():


var uri = 'http://www.flydean.com/doc?title=dart uri';
var encoded = Uri.encodeFull(uri);
assert(encoded ==
    'http://www.flydean.com/doc?title=dart%20uri');
var decoded = Uri.decodeFull(encoded);
assert(uri == decoded);


如果要编码所有的字符,包括那些有意义的字符:/, :, &, #, 那么可以使用encodeComponent() 和 decodeComponent():


var uri = 'http://www.flydean.com/doc?title=dart uri';
var encoded = Uri.encodeComponent(uri);
assert(encoded ==
    'http%3A%2F%2www.flydean.com%2Fdoc%3Ftitle%3Ddart%20uri');
var decoded = Uri.decodeComponent(encoded);
assert(uri == decoded);


解析URI


URI是由scheme,host,path,fragment这些部分组成的。我们可以通过Uri中的这些属性来对Uri进行分解:


var uri =
    Uri.parse('http://www.flydean.com/doc#dart');
assert(uri.scheme == 'http');
assert(uri.host == 'www.flydean.com');
assert(uri.path == '/doc');
assert(uri.fragment == 'dart');
assert(uri.origin == 'http://www.flydean.com');


那么怎么构造Uri呢?我们可以使用Uri的构造函数:


var uri = Uri(
    scheme: 'http',
    host: 'www.flydean.com',
    path: '/doc',
    fragment: 'dart');
assert(
    uri.toString() == 'http://www.flydean.com/doc#dart');


总结



dart为我们提供了非常简单的Uri的使用工具。

相关文章
|
6月前
|
XML 数据格式
蓝易云 - URI和URL和URN区别
总的来说,URI是一个广义的概念,包括URL和URN。URL提供了资源的位置信息,URN提供了资源的唯一名称。
55 2
|
7月前
|
数据安全/隐私保护
URI 和URL 的区别是什么?
URI 和URL 的区别是什么?
577 0
|
自然语言处理
HTTP协议中 URI、URL、URN
HTTP协议中 URI、URL、URN
180 0
URL、URI、URN详解
URI 属于 URL 更高层次的抽象,一种字符串文本标准。 就是说,URI 属于父类,而 URL 属于 URI 的子类。URL 是 URI 的一个子集。 二者的区别在于,URI 表示请求服务器的路径,定义这么一个资源。而 URL 同时说明要如何访问这个资源。
|
分布式计算 监控 Scala
日志分析实战之清洗日志小实例6:获取uri点击量排序并得到最高的url
日志分析实战之清洗日志小实例6:获取uri点击量排序并得到最高的url
177 0
日志分析实战之清洗日志小实例6:获取uri点击量排序并得到最高的url
|
安全 数据安全/隐私保护 C++
5 分钟搞懂 URI、URL 和 URN
5 分钟搞懂 URI、URL 和 URN
1129 0
5 分钟搞懂 URI、URL 和 URN
|
数据安全/隐私保护
URI 和URL 的区别是什么?
大家好,我是阿萨。昨天学习了HTTP方法有哪些?了解了HTTP的最基本的方法。昨天讲解Head 方法的时候说返回URI 相关内容。阿萨问大家一个问题:URI 是什么?
169 0
搞什么啊? URI 和 URL 到现在还不清楚?
搞什么啊? URI 和 URL 到现在还不清楚?
212 0
搞什么啊? URI 和 URL 到现在还不清楚?