Android第三方HTTP网络支持包OkHttp的基础使用教程

OkHttp 包的设计和实现的首要目标是高效。这也是选择 OkHttp 的重要理由之一。OkHttp 提供了对最新的 HTTP 协议版本 HTTP/2 和 SPDY 的支持,这使得对同一个主机发出的所有请求都可以共享相同的套接字连接。如果 HTTP/2 和 SPDY 不可用,OkHttp 会使用连接池来复用连接以提高效率。OkHttp 提供了对 GZIP 的默认支持来降低传输内容的大小。OkHttp 也提供了对 HTTP 响应的缓存机制,可以避免不必要的网络请求。当网络出现问题时,OkHttp 会自动重试一个主机的多个 IP 地址。
(OkHttp的GitHub主页:https://github.com/square/okhttp)
HTTP 客户端所要执行的任务很简单,接受 HTTP 请求并返回响应。每个 HTTP 请求包括 URL,HTTP 方法(如 GET 或 POST),HTTP 头和请求的主体内容等。HTTP 请求的响应则包含状态代码(如 200 或 500),HTTP 头和响应的主体内容等。虽然请求和响应的交互模式很简单,但在实现中仍然有很多细节要考虑。OkHttp 会对收到的请求进行一定的处理,比如增加额外的 HTTP 头。同样的,OkHttp 也可能在返回响应之前对响应做一些处理。例如,OkHttp 可以启用 GZIP 支持。在发送实际的请求时,OkHttp 会加上 HTTP 头 Accept-Encoding。在接收到服务器的响应之后,OkHttp 会先做解压缩处理,再把结果返回。如果 HTTP 响应的状态代码是重定向相关的,OkHttp 会自动重定向到指定的 URL 来进一步处理。OkHttp 也会处理用户认证相关的响应。

如何使用
1.gradle

compile 'com.squareup.okhttp:okhttp:2.4.0'

2.Initial
建议只要new一个实体做全部的操作就行了

okHttpClient = new OkHttpClient();
okHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);
okHttpClient.setReadTimeout(30, TimeUnit.SECONDS);

3.GET
OkHttp 使用调用(Call)来对发送 HTTP 请求和获取响应的过程进行抽象。下面代码中给出了使用 OkHttp 发送 HTTP 请求的基本示例。首先创建一个 OkHttpClient 类的对象,该对象是使用 OkHttp 的入口。接着要创建的是表示 HTTP 请求的 Request 对象。通过 Request.Builder 这个构建帮助类可以快速的创建出 Request 对象。这里指定了 Request 的 url 为 http://www.baidu.com。接着通过 OkHttpClient 的 newCall 方法来从 Request 对象中创建一个 Call 对象,再调用 execute 方法来执行该调用,所得到的结果是表示 HTTP 响应的 Response 对象。通过 Response 对象中的不同方法可以访问响应的不同内容。如 headers 方法来获取 HTTP 头,body 方法来获取到表示响应主体内容的 ResponseBody 对象。
OkHttp 最基本的 HTTP 请求

public class SyncGet {
  public static void main(String[] args) throws IOException {
  OkHttpClient client = new OkHttpClient();

  Request request = new Request.Builder()
      .url("http://www.baidu.com")
      .build();

  Response response = client.newCall(request).execute();
  if (!response.isSuccessful()) {
    throw new IOException("服务器端错误: " + response);
  }

  Headers responseHeaders = response.headers();
  for (int i = 0; i < responseHeaders.size(); i++) {
    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
  }

  System.out.println(response.body().string());
  }
}

4.POST
有了上面GET的基础,我们直接顺便来看POST:

builde Requestbody
RequestBody formBody = new FormEncodingBuilder()
  .add("name", "Cuber")
  .add("age", "26")
  .build();

Request request = new Request.Builder()
   .url(url)
   .post(RequestBody)
   .build();

5.Send
把上面build出来的Request带进来

Response response = client.newCall(request).execute();//如果response回传是null, 就代表timeout或没有网络

或是你想使用Callback...

Response response = client.newCall(request).enqueue(new Callback() {

  @Override
  public void onFailure(Request request, IOException e) {
    //timeout或 没有网络
    //注意!这里是backgroundThread
  }

  @Override
    public void onResponse(Response response) throws IOException {
    //成功
    //注意!这里是backgroundThread
  }
});
(0)

相关推荐

  • android okhttp的基础使用【入门推荐】

    这篇文章主要总结Android著名网络框架-okhttp的基础使用,后续可能会有关于他的高级使用. okhttp是什么 okhttp是Android端的一个Http客户端,其基础功能相当于Android自带的HttpURLConnection和Apache HTTP Client,但他却比自带的2个Http客户端优越很多,一者是写法简单,二者okhttp处理很多网络复杂问题,如会从很多常用的连接问题中自动恢复.如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下

  • Android的HTTP扩展包OkHttp中的缓存功能使用方法解析

    OkHttp 可以对 HTTP 响应的内容在磁盘上进行缓存.在进行 HTTP 请求时,如果该请求的响应已经被缓存而且没有过期,OkHttp 会直接使用缓存中的响应内容,而不需要真正的发出 HTTP 请求到远程服务器.在创建缓存时需要指定一个磁盘目录和缓存的大小.在代码清单 8 中,创建出 Cache 对象之后,通过 OkHttpClient 的 setCache 进行设置.通过 Response 对象的 cacheResponse 和 networkResponse 方法可以得到缓存的响应和从实

  • Android使用okHttp(get方式)下载图片

    一.首先下载Jar包 https://github.com/square/okhttp 如果使用android studio只需要加入依赖compile 'com.squareup.okhttp3:okhttp:3.2.0' 二.下载一张图片并显示 使用的是hanlder的方式 package com.liunan.okhttpdemo2; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import

  • Android中Retrofit+OkHttp进行HTTP网络编程的使用指南

    Retrofit介绍: Retrofit(GitHub主页https://github.com/square/okhttp)和OkHttp师出同门,也是Square的开源库,它是一个类型安全的网络请求库,Retrofit简化了网络请求流程,基于OkHtttp做了封装,解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava.你可以使用不同的反序列化工具

  • Android M(6.x)使用OkHttp包解析和发送JSON请求的教程

    关于Android 6.0 Android老版本网络请求: 1,HttpUrlConnection 2,Apache Http Client Android6.0版本网络请求: 1,HttpUrlConnection 2,OkHttp Android6.0版本废弃了老的网络请求,那么它的优势是什么呢? 1,支持SPDY,共享同一个Socket来处理同一个服务器的所有请求 2,如果SPDY不可用,则通过连接池来减少请求延时 3,无缝的支持GZIP来减少数据流量 4,缓存响应数据来减少重复的网络请求

  • Android App开发中HTTP扩展包OkHttp的入门使用指南

    Android 开发,不可避免的会用到网络技术,而多数情况下,我们都是使用 HTTP 协议来发送和接收网络数据.Android 系统主要提供两种方式来进行 HTTP 通信,HttpURLConnection 和 HttpClient,但是从 Android 2.3 及以后版本中,Google 推荐使用 HttpURLConnection,究其原因,就是由于 HttpClient 的 API 数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前 Android 团队在提升和优化

  • 使用Android的OkHttp包实现基于HTTP协议的文件上传下载

    OkHttp的HTTP连接基础 虽然在使用 OkHttp 发送 HTTP 请求时只需要提供 URL 即可,OkHttp 在实现中需要综合考虑 3 种不同的要素来确定与 HTTP 服务器之间实际建立的 HTTP 连接.这样做的目的是为了达到最佳的性能. 首先第一个考虑的要素是 URL 本身.URL 给出了要访问的资源的路径.比如 URL http://www.baidu.com 所对应的是百度首页的 HTTP 文档.在 URL 中比较重要的部分是访问时使用的模式,即 HTTP 还是 HTTPS.这

  • 详解Android中使用OkHttp发送HTTP的post请求的方法

    HTTP POST 和 PUT 请求可以包含要提交的内容.只需要在创建 Request 对象时,通过 post 和 put 方法来指定要提交的内容即可. HTTP POST 请求的基本示例: public class PostString { public static void main(String[] args) throws IOException { OkHttpClient client = new OkHttpClient(); MediaType MEDIA_TYPE_TEXT

  • Android中的Retrofit+OkHttp+RxJava缓存架构使用

    RxJava如何与Retrofit结合 先扔出build.gradle文件的内容 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxand

  • Android中使用OkHttp包处理HTTP的get和post请求的方法

    概览 http是现在主流应用使用的网络请求方式, 用来交换数据和内容, 有效的使用HTTP可以使你的APP 变的更快和减少流量的使用 OkHttp 是一个很棒HTTP客户端(GitHub主页:https://github.com/square/okhttp): 支持SPDY, 可以合并多个到同一个主机的请求 使用连接池技术减少请求的延迟(如果SPDY是可用的话) 使用GZIP压缩减少传输的数据量 缓存响应避免重复的网络请求 当你的网络出现拥挤的时候,就是OKHttp 大显身手的时候, 它可以避免

随机推荐