当前位置:网站首页 > 技术博客 > 正文

okhttp3原理



OkHttp 是一个高效的 HTTP 客户端,具有非常多的优势:

  1. 能够高效的执行 http,数据加载速度更快,更省流量
  2. 支持 GZIP 压缩,提升速度,节省流量
  3. 缓存响应数据,避免了重复的网络请求
  4. 使用简单,支持同步阻塞调用和带回调的异步调用

OkHttp 支持 Android2.3 以上,JDK1.7 以上。

使用 OkHttp 进行 Get 请求只需要四个步骤

  1. 新建 OkHttpClient对象
  2. 构造 Request 对象
  3. 将 Request 对象封装为 Call
  4. 通过 Call 来执行同步或异步请求
 
  
 
  

通过 call.enqueue(Callback)方法来提交异步请求

 
  

创建 Post 请求的方式与 Get 方法类似,只是需要增加一个步骤,构造出一个请求参数对象RequestBody ,用于携带我们需要提交的数据。(下面均以 Post 的异步请求为例,Post 同步请求只需将 call.enqueue() 替换成 call.execute() 即可)

 
  

Request 的 post 方法所接收的参数是 RequestBody 对象,所以只要是 RequestBody 类及其子类都可以当做参数传入。

RequestBody是一个抽象类,常用的 RequestBody 实现类有这么几种:

FormBody是RequestBody的实现类,用于表单方式的请求

 
  

其中前三个方法最终调用的都是第四个方法,所以我们可以具体看一下最后两个方法的具体实现

 
  
  • text/html:HTML格式
  • text/pain:纯文本格式
  • image/jpeg:jpg图片格式
  • application/json:JSON数据格式
  • application/octet-stream:二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded:form表单encType属性的默认格式,表单数据将以key/value的形式发送到服务端
  • multipart/form-data:表单上传文件的格式
 
  

上传文件:

 
  

多文件和键值对同时上传

 
  
  • 同步:请求和处理响应发生在同一线程。并且此线程会在响应返回之前会一直被堵塞。
  • 异步:请求和处理响应发生在不同线程。将发送请求操作发生在一个线程,并且通过回调的方式在其他线程进行处理响应。(一般在子线程发送请求,主线程处理响应)。

Calls可以在任何线程被取消。当这个Call尚未执行结束时,执行取消操作将会直接导致此Call失败!当一个Call被取消时,无论是写入请求主体或者读取响应主体的代码操作,都会抛出一个IOException异常。

  • 上一篇: urllib3
  • 下一篇: 一句话木马的操作流程
  • 版权声明


    相关文章:

  • urllib32025-07-16 16:30:04
  • rapid程序是什么意思2025-07-16 16:30:04
  • 数据库表设计例子简单2025-07-16 16:30:04
  • css字体样式大全2025-07-16 16:30:04
  • 线程安全的类有哪些2025-07-16 16:30:04
  • 一句话木马的操作流程2025-07-16 16:30:04
  • 如何封装win10系统 详细图文教程2025-07-16 16:30:04
  • okhttps2025-07-16 16:30:04
  • css如何对溢出文字进行隐藏2025-07-16 16:30:04
  • rbac权限管理设计案例2025-07-16 16:30:04