000 okhttp3的Get使用

一:概述java

1.說明android

  java與android均可以使用。web

  是網絡請求的開源框架。spring

  square公司開發,用於替代HttpUrlConnection和Apache  HttpClient數組

 

2.優勢緩存

  • 支持HTTP2/SPDY(SPDY是Google開發的基於TCP的傳輸層協議,用以最小化網絡延遲,提高網絡速度,優化用戶的網絡使用體驗。)
  • socket自動選擇最好路線,並支持自動重連,擁有自動維護的socket鏈接池,減小握手次數,減小了請求延遲,共享Socket,減小對服務器的請求次數。
  • 基於Headers的緩存策略減小重複的網絡請求。
  • 擁有Interceptors輕鬆處理請求與響應(自動處理GZip壓縮)。

 

3.功能服務器

  • PUT,DELETE,POST,GET等請求
  • 文件的上傳下載
  • 加載圖片(內部會圖片大小自動壓縮)
  • 支持請求回調,直接返回對象、對象集合
  • 支持session的保持

 

4.準備項目網絡

  在這裏須要使用兩個項目進行實驗。session

  調用的項目:app

    須要添加使用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,添加多個值與健。

相關文章
相關標籤/搜索