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,添加多个值与健。

原文地址:https://www.cnblogs.com/juncaoit/p/11433670.html