欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的OkHttpClient 工具類

 更新時(shí)間:2023年06月17日 10:33:04   作者:會(huì)改bug的程序員  
這篇文章主要介紹了Java中的OkHttpClient工具類,具有很好的參考價(jià)值,希望杜大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java OkHttpClient 工具類

OkHttpClient

1、pom

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

2.代碼例子

import okhttp3.*;
import okhttp3.Request.Builder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import com.alibaba.fastjson.JSONObject;
public class HttpClient {
OkHttpClient okHttpClient;
public HttpClient() {
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
}
public void sendJson(String url, String json, Callback callback) {
//MediaType 設(shè)置Content-Type 標(biāo)頭中包含的媒體類型值
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
Request request = new Request.Builder()
.url(url)//請(qǐng)求的url
.post(requestBody)
.build();
//創(chuàng)建/Call
Call call = okHttpClient.newCall(request);
//加入隊(duì)列 異步操作
call.enqueue(callback);
}
private String attachHttpGetParams(String url, Map<String, String> params) {
Iterator<String> keys = params.keySet().iterator();
Iterator<String> values = params.values().iterator();
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("?");
for (int i = 0; i < params.size(); i++) {
String value = null;
try {
value = URLEncoder.encode(values.next(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
stringBuffer.append(keys.next() + "=" + value);
if (i != params.size() - 1) {
stringBuffer.append("&");
}
}
return url + stringBuffer.toString();
}
public String get(String url, Map<String, String> params) throws IOException {
Request request = new Request.Builder().url(attachHttpGetParams(url, params)).build();
return okHttpClient.newCall(request).execute().body().string();
}
public String post(String url, Map<String, String> formValues) throws IOException {
FormBody.Builder builder = new FormBody.Builder();
formValues.forEach((k, v) -> {
builder.add(k, v);
});
Request request = new Request.Builder().url(url).post(builder.build()).build();
Call call = okHttpClient.newCall(request);
return call.execute().body().string();
}
public String postWithHeaderJson(String url, Map<String, String> header, String json) throws IOException {
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
Builder builderHeader = new Request.Builder();
header.forEach((k, v) -> {
builderHeader.addHeader(k, v);
});
Request request = builderHeader.url(url).post(requestBody).build();
Call call = okHttpClient.newCall(request);
return call.execute().body().string();
}
public String postJson(String url, String content) throws IOException {
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), content);
Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = okHttpClient.newCall(request);
return call.execute().body().string();
}
public String getWithHeader(String url, Map<String, String> header) throws IOException {
Builder builderHeader = new Request.Builder();
header.forEach((k, v) -> {
builderHeader.addHeader(k, v);
});
Request request = builderHeader.url(url).build();
return okHttpClient.newCall(request).execute().body().string();
}
public static String sendPost(String url, String param) {
OutputStreamWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
HttpURLConnection conn = null;
conn = (HttpURLConnection) realUrl.openConnection();
// 打開(kāi)和URL之間的連接
// 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST"); // POST方法
// 設(shè)置通用的請(qǐng)求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.connect();
// 獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
// 發(fā)送請(qǐng)求參數(shù)
out.write(param);
// flush輸出流的緩沖
out.flush();
// 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng)
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("發(fā)送 POST 請(qǐng)求出現(xiàn)異常!" + e);
e.printStackTrace();
}
//使用finally塊來(lái)關(guān)閉輸出流、輸入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
}

工具類OkHttpClient解析

1.HttpUtils

public class HttpUtils {
    public static String get(String urlString){
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new LoggingInterceptor())//日志攔截器
                .connectTimeout(10, TimeUnit.SECONDS)//連接超時(shí)
                .readTimeout(10,TimeUnit.SECONDS)//讀取超時(shí)
                .writeTimeout(10,TimeUnit.SECONDS)//寫(xiě)入超時(shí)
                .build();
        Request request = new Request.Builder().url(urlString).get().build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            String result = response.body().string();
            Log.i("dt","請(qǐng)求結(jié)果:"+result);
            return result;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String postForm(String url,String[] name,String[] value){
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new LoggingInterceptor())//日志攔截器
                .connectTimeout(10, TimeUnit.SECONDS)//連接超時(shí)
                .readTimeout(10,TimeUnit.SECONDS)//讀取超時(shí)
                .writeTimeout(10,TimeUnit.SECONDS)//寫(xiě)入超時(shí)
                .build();
        FormBody.Builder formBuild = new FormBody.Builder();
        for (int i = 0; i < name.length; i++) {
            formBuild.add(name[i],value[i]);
        }
        Request request = new Request.Builder().url(url).post(formBuild.build()).build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            String result = response.body().string();
            Log.i("dt",result);
            return result;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String postFile(String url,String[] name,String[] value,String fileParamName,File file){
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new LoggingInterceptor())//日志攔截器
                .connectTimeout(10, TimeUnit.SECONDS)//連接超時(shí)
                .readTimeout(10,TimeUnit.SECONDS)//讀取超時(shí)
                .writeTimeout(10,TimeUnit.SECONDS)//寫(xiě)入超時(shí)
                .build();
        MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
        if(file != null){
            // MediaType.parse() 里面是上傳的文件類型。
            RequestBody body = RequestBody.create(MediaType.parse("image/*"), file);
            String filename = file.getName();
            // 參數(shù)分別為: 文件參數(shù)名 ,文件名稱 , RequestBody
            requestBody.addFormDataPart(fileParamName, "jpg", body);
        }
        if (name!=null) {
            for (int i = 0; i < name.length; i++) {
                requestBody.addFormDataPart(name[i], value[i]);
            }
        }
        Request request = new Request.Builder().url(url).post(requestBody.build()).build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            if (response.code()==200) {
                return response.body().string();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public static String postJson(String url,String jsonString){
        OkHttpClient okHttpClient = new OkHttpClient();
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),jsonString);
        Request request = new Request.Builder().url(url).post(requestBody).build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的Map集合根據(jù)key值排序的實(shí)現(xiàn)

    Java中的Map集合根據(jù)key值排序的實(shí)現(xiàn)

    本文主要介紹了Java中的Map集合如何根據(jù)key值排序,包含使用TreeMap和使用lambda表達(dá)式和Stream流兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 詳解Java Streams 中的異常處理

    詳解Java Streams 中的異常處理

    這篇文章主要介紹了Java Streams 中的異常處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JAVA中JNI的簡(jiǎn)單使用分享

    JAVA中JNI的簡(jiǎn)單使用分享

    這篇文章介紹了JAVA中JNI的簡(jiǎn)單使用,有需要的朋友可以參考一下
    2013-10-10
  • 使用idea遠(yuǎn)程調(diào)試jar包的配置過(guò)程

    使用idea遠(yuǎn)程調(diào)試jar包的配置過(guò)程

    這篇文章主要介紹了使用idea遠(yuǎn)程調(diào)試jar包的配置過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Spring Boot+Drools規(guī)則引擎整合詳解

    Spring Boot+Drools規(guī)則引擎整合詳解

    本篇文章主要介紹了Spring Boot+Drools規(guī)則引擎整合,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Java使用遞歸復(fù)制文件夾及文件夾

    Java使用遞歸復(fù)制文件夾及文件夾

    這篇文章主要介紹了Java使用遞歸復(fù)制文件夾及文件夾,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 如何剔除eureka無(wú)效和down狀態(tài)的問(wèn)題

    如何剔除eureka無(wú)效和down狀態(tài)的問(wèn)題

    這篇文章主要介紹了如何剔除eureka無(wú)效和down狀態(tài)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Mybatis + js 實(shí)現(xiàn)下拉列表二級(jí)聯(lián)動(dòng)效果

    Mybatis + js 實(shí)現(xiàn)下拉列表二級(jí)聯(lián)動(dòng)效果

    這篇文章給大家介紹基于Mybatis + js 實(shí)現(xiàn)下拉列表二級(jí)聯(lián)動(dòng)效果,實(shí)現(xiàn)代碼分為前端界面實(shí)現(xiàn)和后端處理方法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • ant打包jar文件腳本分享

    ant打包jar文件腳本分享

    本文介紹的ant腳本是用來(lái)打包jar文件,做完JAVA應(yīng)用一定會(huì)用到這個(gè),需要的朋友可以參考下
    2014-03-03
  • SpringMVC整合mybatis實(shí)例代碼

    SpringMVC整合mybatis實(shí)例代碼

    MyBatis 的前身就是 iBatis 。是一個(gè)數(shù)據(jù)持久層(ORM)框架。下面通過(guò)本文給大家介紹SpringMVC整合mybatis實(shí)例代碼,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05

最新評(píng)論