Java中的OkHttpClient 工具類
更新時間:2023年06月17日 10:33:04 作者:會改bug的程序員
這篇文章主要介紹了Java中的OkHttpClient工具類,具有很好的參考價值,希望杜大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
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 設置Content-Type 標頭中包含的媒體類型值
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
Request request = new Request.Builder()
.url(url)//請求的url
.post(requestBody)
.build();
//創(chuàng)建/Call
Call call = okHttpClient.newCall(request);
//加入隊列 異步操作
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();
// 打開和URL之間的連接
// 發(fā)送POST請求必須設置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST"); // POST方法
// 設置通用的請求屬性
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對象對應的輸出流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
// 發(fā)送請求參數(shù)
out.write(param);
// flush輸出流的緩沖
out.flush();
// 定義BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("發(fā)送 POST 請求出現(xiàn)異常!" + e);
e.printStackTrace();
}
//使用finally塊來關閉輸出流、輸入流
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)//連接超時
.readTimeout(10,TimeUnit.SECONDS)//讀取超時
.writeTimeout(10,TimeUnit.SECONDS)//寫入超時
.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","請求結果:"+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)//連接超時
.readTimeout(10,TimeUnit.SECONDS)//讀取超時
.writeTimeout(10,TimeUnit.SECONDS)//寫入超時
.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)//連接超時
.readTimeout(10,TimeUnit.SECONDS)//讀取超時
.writeTimeout(10,TimeUnit.SECONDS)//寫入超時
.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 "";
}
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java通過python命令執(zhí)行DataX任務的實例
今天小編就為大家分享一篇Java通過python命令執(zhí)行DataX任務的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Aop動態(tài)代理和cglib實現(xiàn)代碼詳解
這篇文章主要介紹了Aop動態(tài)代理和cglib實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12
SpringBoot配置Redis連接池的實現(xiàn)步驟
本文主要介紹了SpringBoot配置Redis連接池的實現(xiàn)步驟,詳細的講解了連接池的作用、配置方式、連接池參數(shù)說明,具有一定的參考價值,感興趣的可以了解一下2025-03-03
Java實現(xiàn)統(tǒng)計在線人數(shù)功能的方法詳解
很多人在筆試或者面試中問到:現(xiàn)在要你實現(xiàn)一個統(tǒng)計在線人數(shù)的功能,你該怎么設計?不知道的朋友,這篇文章就來告訴你具體實現(xiàn)方法2022-08-08
SpringBoot項目jar發(fā)布后如何獲取jar包所在目錄路徑
這篇文章主要介紹了SpringBoot項目jar發(fā)布后如何獲取jar包所在目錄路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

