zoukankan      html  css  js  c++  java
  • 000 okhttp3的Get使用

    一:概述

    1.说明

      java与android都可以使用。

      是网络请求的开源框架。

      square公司开发,用于替代HttpUrlConnection和Apache  HttpClient

    2.优点

    • 支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。)
    • socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数。
    • 基于Headers的缓存策略减少重复的网络请求。
    • 拥有Interceptors轻松处理请求与响应(自动处理GZip压缩)。

    3.功能

    • PUT,DELETE,POST,GET等请求
    • 文件的上传下载
    • 加载图片(内部会图片大小自动压缩)
    • 支持请求回调,直接返回对象、对象集合
    • 支持session的保持

    4.准备项目

      在这里需要使用两个项目进行实验。

      调用的项目:

        需要添加使用okhttp包,使用端口8090.

      

      被调用的项目:

        使用端口8080

        是一个普通的项目即可。

    二:程序GET

    1.get的普通使用

      被调用程序

    package com.jun.web2forokhttp.okhttp;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @RestController
    public class GetReq {
        @GetMapping("/ok/getInfo")
        public Map getInfo(@RequestParam("type") String type){
            Map map =new HashMap();
            if("1".equals(type)){
                map.put("1","aa");
                map.put("2","bb");
            }else {
                map.put("3","cc");
                map.put("4","dd");
            }
            return map;
        }
    }
    

      

    2.调用程序

    package com.jun.web.okhttp;
    
    
    import okhttp3.Call;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    
    import java.io.IOException;
    
    public class GetHttp {
        public static void main(String[] args) {
            withoutHeader();
        }
    
        public static void withoutHeader(){
            String url="http://localhost:8080/ok/getInfo?type=18";
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(url)
                    .build();
            Call call = client.newCall(request);
            try{
                Response response = call.execute();
                System.out.println("get="+response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

      效果:

      

      

    3.request的请求头中添加参数

      被调用程序

    package com.jun.web2forokhttp.okhttp;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestHeader;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @RestController
    public class GetReq {
        /**
         * 普通的get请求
         * @param type
         * @return
         */
        @GetMapping("/ok/getInfo")
        public Map getInfo(@RequestParam("type") String type){
            Map map =new HashMap();
            if("1".equals(type)){
                map.put("1","aa");
                map.put("2","bb");
            }else {
                map.put("3","cc");
                map.put("4","dd");
            }
            return map;
        }
    
        /**
         * 参数从请求头中获取
         * @param type
         * @return
         */
        @GetMapping("/ok/getMoreInfo")
        public Map getMoreInfo(@RequestParam("type") String type, @RequestHeader("cjtoken") String cjToken){
            Map map =new HashMap();
            if("1".equals(type)){
                map.put("1","aa");
                map.put("2","bb");
                map.put("cjtoken",cjToken);
            }else {
                map.put("3","cc");
                map.put("4","dd");
                map.put("cjtoken",cjToken);
            }
    
            return map;
        }
    }
    

      

    4.调用程序

    package com.jun.web.okhttp;
    
    
    import okhttp3.Call;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    
    import java.io.IOException;
    
    public class GetHttp {
        public static void main(String[] args) {
    //        withoutHeader();
            withHeader();
        }
    
        /**
         * 没有请求头的请求
         */
        public static void withoutHeader(){
            String url="http://localhost:8080/ok/getInfo?type=18";
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(url)
                    .header("cjtoken","8765095321")
                    .build();
            Call call = client.newCall(request);
            try{
                Response response = call.execute();
                System.out.println("get="+response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 有请求头的请求
         */
        public static void withHeader(){
            String url="http://localhost:8080/ok/getMoreInfo?type=18";
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(url)
                    .header("cjtoken","8765095321")
                    .build();
            Call call = client.newCall(request);
            try{
                Response response = call.execute();
                System.out.println("get="+response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

      效果:

      

    三:注意点

    1.返回值

      string()只是其中之一。

    • onResponse回调有一个参数是response
      如果想获得返回的是字符串,可以通过response.body().string()
      如果获得返回的二进制字节数组,则调用response.body().bytes()
      如果想拿到返回的inputStream,则调response.body().byteStream()
      有inputStream我们就可以通过IO的方式写文件

      使用response.code()获取返回的状态码。如果成功,则是200.

    2.header

      可以写多个header,添加多个值与健。

  • 相关阅读:
    适者生存还是强者生存
    写给十岁的清为
    毕业后的十年
    Python3 字符编码
    线段树模板
    F
    E
    D
    C
    B
  • 原文地址:https://www.cnblogs.com/juncaoit/p/11433670.html
Copyright © 2011-2022 走看看