OkHttp-(一)HttpUrl了解

1,git地址:https://github.com/square/okhttp

2,官网地址: https://square.github.io/okhttp/

Http作为现代应用程序的常用联网方式,用于交互数据和媒体信息。高效的执行HTTP能让你的程序更快的加载数据并节省带宽。

OkHttp作为默认的高效Http客户端,有以下优势:

  • HTTP/2 支持,HTTP/2运行对同一主机的的所有请求共享一个socket
  • 当不支持HTTP/2的情况,连接池的使用,减少请求延迟。
  • GZIP透明传输
  • 对response的缓存,避免重复网络请求

了解URL

在WWW中,每一个信息资源都有统一的且在网上唯一的地址,该地址就是URL。

uniform resouce locator(统一资源定位器),由4部分组成:协议、主机、端口、路劲,语法格式为:
protocol://hostname[:port] / path / [;parameters][?query]#fragment

protocol(协议)

指定使用的传输协议,比如http://,https://,ftp://,等;

在该类中使用Scheme表示,值只支持http和https

hostname(主机名)

指存放资源的服务器域名系统主机名或IP地址,有时主机名前也可以包含连接到服务器所需要的用户名和密码(格式:username:password@hostname)

在该类中可用比如 squre.com 、localhost,IPv4地址:192.168.0.1,IPv6地址:::1表示

通常一个web服务器可以用多个标识符访问,每个web服务器的名称都是一个不同的URL,它们不能互换。比如http://square.github.io/dagger和http://google.github.io/dagger 分配的是同样的ip地址,但是这两个url标识不同的资源。

port(端口号)

整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http默认端口号80,https默认端口号443

path(路径)

由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址

parameters(参数)

这是用于指定特殊参数的可选项

query(查询)

可选,可有多个参数,用“&”符号隔开,每个参数和值用“=”符号隔开

1,相关的参数需要进行编码处理

fragment(信息片断)

字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释

了解HttpUrl

HttpUrl则围绕URL的相关内容进行拆分和组合处理,同时对传递的相关内容进行编码处理.

对地址进行组合处理

HttpUrl url = new HttpUrl.Builder()
    .scheme("https")
    .host("www.google.com")
    .addPathSegment("search")
    .addQueryParameter("q", "polar bears")
    .build();

可以得到如下完整的请求地址:

System.out.println(url);
//则将会打印出:
https://www.google.com/search?q=polar%20bears

获取地址中的相关URL信息

HttpUrl url = HttpUrl.parse("https://twitter.com/search?q=cute%20%23puppies&f=images");
for (int i = 0, size = url.querySize(); i < size; i++) {
  System.out.println(url.queryParameterName(i) + ": " + url.queryParameterValue(i));
}

将会输出以下信息:

q: cute #puppies
f: images

对原有地址进行处理,重新定位到新的地址

HttpUrl base = HttpUrl.parse("https://www.youtube.com/user/WatchTheDaily/videos");
HttpUrl link = base.resolve("../../watch?v=cbP2N1BQdYc");
System.out.println(link);

将会输出以下信息:

https://www.youtube.com/watch?v=cbP2N1BQdYc

相关的具体实现,可看参考HttpUrl源码

小结

  1. HttpUrl主要完成按照URL规范对我们制定的url进行编码、组合、拆解处理
  2. HttpUrl对处理的url要求符合http协议规范
  3. 如果项目中有多个地址,且不同的环境下,地址对应的path不一致,则需要重点关注一下HttpUrl中segment的处理

你可能感兴趣的:(OkHttp,HttpUrl,URL)