zoukankan      html  css  js  c++  java
  • okhttp——1.基本使用及概要

    okhttp基本使用及概要

    github地址
    官网地址

    特性:

    1. socket复用 (同一个主机共享一个socket)
    2. 结果缓存减少重复请求
    3. 支持透明的gzip压缩

    http/https协议栈

    创建client

    OkHttpClient httpsClient = new OkHttpClient.Builder()
                        .protocols(Collections.singletonList(Protocol.HTTP_1_1))
                        .connectTimeout(timeOut, TimeUnit.MILLISECONDS)
                        .readTimeout(timeOut, TimeUnit.MILLISECONDS)
                        .build();
    

    上面为基本的okhttp的创建方式,当然还有很多其它的高级点的设置,下面介绍几个:

    // 业务可以自己实现dns接口,okhttp内部有默认实现,无超时逻辑,可能出现dns解析几十秒的问题(dns为树形结构如果查询不到则会逐级查询直到根域名服务器,整个过程非常耗时。出现过一个bug当解析ip+端口号的错误域名时耗时可以达几十秒级别)
    // 所以建议自己实现dns接口,设置一个超时时间
    public Builder dns(Dns dns)
    
    // 域名校验接口(只有https需要设置,在ssl握手阶段,如果url域名与服务器的域名不匹配时,会交给HostnameVerifier接口判断是否进行连接)
    public Builder hostnameVerifier(HostnameVerifier hostnameVerifier)
    
    // 可以设置SocketFactory,用于创建Socket
    public Builder socketFactory(SocketFactory socketFactory)
    
    // 对于https的连接创建Factory可以用如下方法
    public Builder sslSocketFactory(SSLSocketFactory sslSocketFactory)
    
    // 是否支持重定向,默认为支持
    Builder followRedirects(boolean followRedirects)
    
    // 连接失败后是否重连: 默认在 特定场景下回重连(如一个host有多个ip,一个ip失败会尝试另一个)
    public Builder retryOnConnectionFailure(boolean retryOnConnectionFailure)
    
    // 添加网络拦截器
    Builder addNetworkInterceptor(Interceptor interceptor)
    
    // 请求拦截器
    Builder addInterceptor(Interceptor interceptor)
    
    // 用于监控请求的每个阶段,可以做 端到端监控,监控每个接口统计耗时
    Builder eventListener(EventListener eventListener)
    

    除以上接口外还可以设置 Dispatch(线程管理)、代理、自定义连接池等,功能很强大

    构造请求

    请求构造比较简单,具体可参考如下:

    Request request = new Request.Builder()
                        .url(url)
                        .post(data)
                        .headers(Headers.of(headerParams))
                        .build();
    

    同步请求

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

    异步请求

    Response response = client.newCall(request).enqueue(Callback responseCallback)
    

    请求流程


    )

    // https 中ssl过程
    SSLSocketFactory

    参考:
    https://www.jianshu.com/p/9deec36f2759

    梦想不是浮躁,而是沉淀和积累
  • 相关阅读:
    使用dom4j 解析xml
    xml schema 建立xml文档
    xml dtd 约束建立xml文档
    DBCP 连接池的使用
    c++面向过程和面向对象-C++编译器是如何管理类和对象的
    c++读取文本文件
    一个范围的两个数进行数位的累加,实现对两个数num1和num2的数位和相加
    C++批量注释代码段取消注释代码段快捷键
    利用MATLAB截取一张复杂图片中想要的区域
    python学习之路系列
  • 原文地址:https://www.cnblogs.com/NeilZhang/p/12738353.html
Copyright © 2011-2022 走看看