okhttp3 簡單使用

1. 簡介

okhttp是一個(gè)高效的http請求客戶端,它有如下一些特點(diǎn):
1)使用連接池技術(shù),減少延遲
2)同一個(gè)主機(jī)請求,共享一個(gè)socket
3)使用壓縮請求,減少下載數(shù)據(jù)的大小
4)可以緩存數(shù)據(jù),對于同一個(gè)請求

2. java使用依賴

maven最新依賴

<dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>4.9.2</version>
</dependency>

3. 代碼示例

下面顯示一個(gè)簡單的同步get請求

package net_;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class OkHttpTest {
    private static final OkHttpClient client = new OkHttpClient();
    public static void main(String[] args) throws IOException {
        String url = "http://www.itdecent.cn/u/a3303ebda4f6";
        Request request = new Request.Builder().url(url).build();

        Response response = client.newCall(request).execute();
        if(!response.isSuccessful()){
            System.out.println("request unsuccessful");
        }else {
            System.out.println(response.body().string());
        }
    }
}

下面是執(zhí)行返回的結(jié)果:


執(zhí)行成功結(jié)果.png

4. 執(zhí)行過程簡要說明:

1)初始化生成一個(gè)client客戶端
2)定義一個(gè)請求Request,請求參數(shù)材料只有一個(gè),就是目標(biāo)請求的url
3)由客戶端執(zhí)行請求方法,參數(shù)材料即為上面的Request,結(jié)果就是一個(gè)執(zhí)行結(jié)果Response
4)我們從執(zhí)行結(jié)果Response中可以得到一個(gè)有用的信息,比如請求是否成功,以及請求返回的數(shù)據(jù)體結(jié)果

5. POST請求及其它一些參數(shù)

public static void post(){
        String url = "http://www.itdecent.cn/u/a3303ebda4f6";
        FormBody.Builder formBodyBuilder = new FormBody.Builder();
        formBodyBuilder.add("paramName1","param alue1");
        formBodyBuilder.add("paramName2","param value2");
        Request request = new Request.Builder().url(url).post(formBodyBuilder.build()).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                String result = response.body().string();
                System.out.println(result);
            }
        });
    }

注:post請求與get請求區(qū)別
1)在構(gòu)造Request請求時(shí),指定post方法,上面的一個(gè)示例中并沒有指定get方法,get是一個(gè)缺省的方法,默認(rèn)可以不寫
2)post請求時(shí),需要傳遞額外的表單參數(shù)FormBody.build

  1. 換了一個(gè)處理響應(yīng)response的方法,使用了enqueue方法,參數(shù)為Callback實(shí)現(xiàn)的匿名類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容