HttpUrl主要用来规范普通的url连接,并且解析url的组成部分
现通过下面的例子来示例httpUrl的使用
https://www.google.com/search?q=maplejaw
①使用parse解析url字符串:
- HttpUrl url = HttpUrl.parse(“https://www.google.com/search?q=maplejaw”);
②通过构造者模式来常见:
-
HttpUrl url = new HttpUrl.Builder()
-
.scheme(“https”)
-
.host(“www.google.com”)
-
.addPathSegment(“search”)
-
.addQueryParameter(“q”, “maplejaw”)
-
.build();
2.Headers
``````````Headers用于配置请求头,对于请求头配置大家一定不陌生吧,比如Content-Type,
User-Agent和`Cache-Control等等。`````````````
创建Headers也有两种方式。如下: (1)of()创建:传入的数组必须是偶数对,否则会抛出异常。
- Headers.of(“name1”,“value1”,“name2”,“value2”,…);
还可以使用它的重载方法of(Map<String,String> map)方法来创建
(2)
构建者模式创建:``````````````````````````
-
Headers mHeaders=new Headers.Builder()
-
.set(“name1”,“value1”)//set表示name1是唯一的,会覆盖掉已经存在的
-
.add(“name2”,“value2”)//add不会覆盖已经存在的头,可以存在多个
-
.build();
我们来看一下Header的内部,源码就不粘贴了很简单,Headers内部是通过一个数组来保存header private final String[] namesAndValues;大家可能会有这样的疑问,为什么不用Map而用数组呢?因为Map的Key是唯一的,而header要求不唯一
另外,数组方便取数据吗?很方便,我们来看着三个方法
最后通过toString方法转变成String,方便写入请求头,
-
@Override
-
public String toString() {
-
StringBuilder result = new StringBuilder();
-
, size = size(); i < size; i++) {
-
result.append(name(i)).append(": “).append(value(i)).append(”\n");
-
}
-
return result.toString();
-
}
-
/** Returns the field at {@code position} or null if that is out of range. */
-
public String name(int index) {
-
;
-
|| nameIndex >= namesAndValues.length) {
-
return null;
-
}
-
return namesAndValues[nameIndex];
-
}
-
/** Returns the value at {@code index} or null if that is out of range. */
-
public String value(int index) {
-
- ;
-
|| valueIndex >= namesAndValues.length) {
-
return null;
-
}
-
return namesAndValues[valueIndex];
-
}