OkHttpClient使用示例

OKHttpClient是一个类似HttpClient的工具,用于模拟Http,https的请求。语法使用方面要比HttpClient更简洁

一.

1、Jar包下载

maven引入:

    <dependency>
      <groupId>com.squareup.okhttpgroupId>
      <artifactId>okhttpartifactId>
      <version>2.2.0version>
      <scope>compilescope>
    dependency>

手动下载:

下载以下jar文件导入工程即可:

okhttp-2.2.0.jar

okio-1.2.0.jar

2、示例代码

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
	.url("http://www.baidu.com")
	.header("User-Agent", "OkHttp Headers.java")
	.build();

Response response = client.newCall(request).execute();

System.out.println("Result: " + response.isSuccessful());
System.out.println("Server: " + response.header("Server"));
System.out.println("ResponseBody: " + response.body().string());

3、其他功能

  1. 使用 GZIP 压缩减少传输的数据量;
  2. 缓存,减少重复请求;
  3. SPDY;
  4. 连接池;
  5. 失败重试(如果你的服务有多个 IP 地址,如果第一次连接失败,OkHttp 将使备用地址);

二.

1.同步get

下载一个文件,打印他的响应头,以string形式打印响应体。
响应体的 string() 方法对于小文档来说十分方便、高效。但是如果响应体太大(超过1MB),应避免适应 string()方法 ,因为他会将把整个文档加载到内存中。
对于超过1MB的响应body,应使用流的方式来处理body。

2. 异步get

在一个工作线程中下载文件,当响应可读时回调Callback接口。读取响应时会阻塞当前线程。OkHttp现阶段不提供异步api来接收响应体。


3.提取响应头

典型的HTTP头 像是一个 Map :每个字段都有一个或没有值。但是一些头允许多个值,像Guava的Multimap。例如:HTTP响应里面提供的Vary响应头,就是多值的。OkHttp的api试图让这些情况都适用。

当写请求头的时候,使用header(name, value)可以设置唯一的name、value。如果已经有值,旧的将被移除,然后添加新的。使用addHeader(name, value)可以添加多值(添加,不移除已有的)。
当读取响应头时,使用header(name)返回最后出现的name、value。通常情况这也是唯一的name、value。如果没有值,那么header(name)将返回null。如果想读取字段对应的所有值,使用headers(name)会返回一个list。
为了获取所有的Header,Headers类支持按index访问。


4.Post方式提交String

使用HTTP POST提交请求到服务。这个例子提交了一个markdown文档到web服务,以HTML方式渲染markdown。因为整个请求体都在内存中,因此避免使用此api提交大文档(大于1MB)。


5.Post方式提交流

以流的方式POST提交请求体。请求体的内容由流写入产生。这个例子是流直接写入Okio的BufferedSink。你的程序可能会使用OutputStream,你可以使用BufferedSink.outputStream()来获取。


6.Post方式提交文件

以文件作为请求体是十分简单的。


7.Post方式提交表单

使用FormEncodingBuilder来构建和HTML

标签相同效果的请求体。键值对将使用一种HTML兼容形式的URL编码来进行编码。


8.Post方式提交分块请求

MultipartBuilder可以构建复杂的请求体,与HTML文件上传形式兼容。多块请求体中每块请求都是一个请求体,可以定义自己的请求头。这些请求头可以用来描述这块请求,例如他的Content-Disposition。如果Content-LengthContent-Type可用的话,他们会被自动添加到请求头中。


9.使用Gson来解析JSON响应

Gson是一个在JSON和Java对象之间转换非常方便的api。这里我们用Gson来解析Github API的JSON响应。
注意:ResponseBody.charStream()使用响应头Content-Type指定的字符集来解析响应体。默认是UTF-8。


10.响应缓存

为了缓存响应,你需要一个你可以读写的缓存目录,和缓存大小的限制。这个缓存目录应该是私有的,不信任的程序应不能读取缓存内容。
一个缓存目录同时拥有多个缓存访问是错误的。大多数程序只需要调用一次new OkHttp(),在第一次调用时配置好缓存,然后其他地方只需要调用这个实例就可以了。否则两个缓存示例互相干扰,破坏响应缓存,而且有可能会导致程序崩溃。
响应缓存使用HTTP头作为配置。你可以在请求头中添加Cache-Control: max-stale=3600 ,OkHttp缓存会支持。你的服务通过响应头确定响应缓存多长时间,例如使用Cache-Control: max-age=9600

你可能感兴趣的:(OkHttpClient使用示例)