作为一名开发人员,大家肯定对URL非常熟悉吧,但是有多少人对它去做过更深入的了解呢?在很多人眼里也许它就仅仅是一个URL
,一个获取数据的接口而已。然而在我看来,它不仅是URL
,还是一个通信链。为什么说是通信链呢,因为它可以按我自己制定的规则协议去传达我想要做的事情,尤其是在项目中解耦是非常的好用,这正是我今天所要分享的内容。相信很多人对URL
并没有一个完整的认识,我先大致介绍下URL
吧。
URL的定义:
Resource 。
URL的组成:
URL的一般语法格式为(带方括号[]的为可选项):
protocol://hostname[:port]/path/[;parameters][?query]#fragment
完整的、带有授权部分的普通统一资源标志符语法格式为:
协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志
URL的格式说明:
1.protocol(协议):
指定使用的传输协议,下表列出 protocol 属性的有效方案名称。 最常用的是 。
- http 通过 HTTP 访问该资源。 格式 http://
- https 通过安全的 HTTPS 访问该资源。 格式 https://
- file 资源是本地计算机上的文件。 格式 file:///(注意后边应是三个斜杠)
- ftp 通过 FTP 访问该资源。 格式 ftp://
- gopher 通过 Gopher 协议访问该资源。
- mailto 资源为电子邮件地址,通过 SMTP 访问。 格式 mailto:
- MMS 通过支持 MMS(流媒体)协议的播放该资源。(代表软件:Windows Media Player) 格式 MMS://
- ed2k 通过支持 ed2k(专用下载链接)协议的 P2P 软件访问该资源。(代表软件:电驴) 格式 ed2k://
- Flashget 通过支持 Flashget:(专用下载链接)协议的 P2P 软件访问该资源。(代表软件:快车) 格式 Flashget://
- thunder 通过支持 thunder(专用下载链接)协议的 P2P 软件访问该资源。(代表软件:迅雷) 格式 thunder://
- news 通过 NNTP 访问该资源。
2.hostname(主机名):
是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)。
3.port(端口号):
4.path(路径):
由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
5.parameters(参数):
这是用于指定特殊参数的可选项。
6.query(查询):
。
7.fragment(信息片断):
字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。
而在 Objective-C
中,这些组成部分可以用系统提供的方法可以很方便的获取到,而不用麻烦的处理一堆字符串,下面给大家举个栗子🌰。
NSString *urlStr =
NSURL *URL = [NSURL URLWithString:urlStr];
NSString *absoluteString = URL.absoluteString;
NSString *baseURL = URL.baseURL.absoluteString;
NSString *scheme = URL.scheme;
NSString *host = URL.host;
NSString *path = URL.path;
NSArray *pathComponents = URL.pathComponents;
NSString *lastPathComponent = URL.lastPathComponent;
NSString *pathExtension = URL.pathExtension;
NSString *query = URL.query;
NSString *fragment = URL.fragment;
NSString *parameterString = URL.parameterString;
NSString *relativePath = URL.relativePath;
NSString *port = [URL.port stringValue];
NSString *user = URL.user;
NSString *password = URL.password;
// absoluteString =
NSLog(@"absoluteString = %@", absoluteString);
// baseURL = (null)
NSLog(@"baseURL = %@", baseURL);
// scheme = https
NSLog(@"scheme = %@", scheme);
// host =
NSLog(@"host = %@", host);
// port = 8080
NSLog(@"port = %@", port);
// path = /path/subpath
NSLog(@"path = %@", path);
// pathComponents = ("/", path, subpath)
NSLog(@"pathComponents = %@", pathComponents);
// lastPathComponent = subpath
NSLog(@"lastPathComponent = %@", lastPathComponent);
// pathExtension = @"" //<object returned empty description>
NSLog(@"pathExtension = %@", pathExtension);
// query = uid=123&gid=45
NSLog(@"query = %@", query);
// fragment = fragment=009&fragment
NSLog(@"fragment = %@", fragment);
// relativePath = /path/subpath (The same as path if baseURL is nil)
NSLog(@"relativePath = %@", relativePath);
// parameterString = parms=test_parms
NSLog(@"parameterString = %@", parameterString);
// user = (null)
NSLog(@"user = %@", user);
// password = (null)
NSLog(@"password = %@", password);
----------------------------- 分割线(下面才是重点) -----------------------------
URL的使用:
也许有人会问,这不就是字符串嘛,干嘛还非得搞个URL
去处理。当然字符串也可以处理,但是我感觉用系统的NSURL
一些方法处理起来更方便一点,获取某些参数或值的时候更简洁一点,当然这也看个人喜好和业务需求,怎样用方便,喜欢用什么就用什么,毕竟条条大路通罗马。😂😂😂