OKHttpUtil使用讲解
文章目錄
- 1 OKHttpUtil
- 1.1 引言
- 1.2 OKHttpUtil功能
- 1.3 OKHttpUtil使用
- 1.3.1 maven引入
- 1.3.2 GET
- 1.3.3 POST
- 1.3.4 文件上傳與下載
- 1.3.5 HttpRequest 鏈式請求
- 1.3.6 post form日志
- 1.4 在 Springboot 中使用
- 1.4.1 maven引入
- 1.4.2 配置
- 1.4.3 快速封裝外部接口
1 OKHttpUtil
1.1 引言
在Java的世界中,Http客戶端之前一直是Apache家的HttpClient占據主導,但是由于此包較為龐大,API又比較難用,因此并不使用很多場景。而新興的OkHttp、Jodd-http固然好用,但是面對一些場景時,學習成本還是有一些的。
很多時候,我們想追求輕量級的Http客戶端,并且追求簡單易用。而OKHttp是一套處理 HTTP 網絡請求的依賴庫,由 Square 公司設計研發并開源,目前可以在 Java 和 Kotlin 中使用。
對于 Android App來說,OkHttp 現在幾乎已經占據了所有的網絡請求操作,對于服務器端請求外部接口也是必備的選擇 。針對OKHttp,OkHttpUtil做了一層封裝,使Http請求變得無比簡單
1.2 OKHttpUtil功能
OKHttpUtil功能:
- 根據URL自動判斷是請求HTTP還是HTTPS,不需要單獨寫多余的代碼。
- 默認情況下Cookie自動記錄,比如可以實現模擬登錄,即第一次訪問登錄 URL后后續請求就是登錄狀態。
- 自動識別304跳轉并二次請求
- 支持代理配置
- 支持referer配置
- 支持User-Agent配置
- 自動識別并解壓Gzip格式返回內容
- 支持springboot 配置文件
- 極簡的封裝調用
1.3 OKHttpUtil使用
1.3.1 maven引入
<dependency><groupId>io.github.admin4j</groupId><artifactId>http</artifactId><version>0.4.0</version> </dependency>最新版查詢:https://search.maven.org/artifact/io.github.admin4j/http
1.3.2 GET
最簡單的使用莫過于用HttpUtil工具類快速請求某個接口:
Response response = HttpUtil.get(https://github.com/search, Pair.of(q, okhttp)); System.out.println(response = + response);1.3.3 POST
一行代碼即可搞定,當然Post請求也很簡單:
JSON 格式的body
form 請求
Map<String, Object> formParams = new HashMap<>(16); formParams.put(username, admin); formParams.put(password, admin123); Response response = HttpUtil.postForm(http://192.168.1.13:9100/auth/login,formParams); System.out.println("response = "+ response);返回格式為JSON的,可以使用 HttpJsonUtil 自動返回JsonObject
JSONObject object=HttpJsonUtil.get(https://github.com/search, Pair.of(q,http), Pair.of(username,agonie201218)); System.out.println("object = "+object);1.3.4 文件上傳與下載
文件上傳
File file=new File(C:\\Users\\andanyang\\Downloads\\Sql.txt); Map<String, Object> formParams=new HashMap<>(); formParams.put(key,test); formParams.put(file,file); formParams.put(token,WXyUseb-D4sCum-EvTIDYL-mEehwDtrSBg-Zca7t:qgOcR2gUoKmxt-VnsNb657Oatzo=:eyJzY29wZSI6InpoYW56aGkiLCJkZWFkbGluZSI6MTY2NTMwNzUxNH0=); Response response=HttpUtil.upload(https://upload.qiniup.com/,formParams); System.out.println(response);文件下載
HttpUtil.down(https://gitee.com/admin4j/common-http,path/);1.3.5 HttpRequest 鏈式請求
get
Response response = HttpRequest.get(https://search.gitee.com/?skin=rec&type=repository).queryMap(q,admin4j).header(HttpHeaderKey.USER_AGENT,admin4j).execute(); System.out.println("response = "+ response);post form
Response response = HttpRequest.get(http://192.168.1.13:9100/auth/login).queryMap(q,admin4j).header(HttpHeaderKey.USER_AGENT,admin4j).form(username,admin).form(password,admin123).execute(); System.out.println("response = "+response);1.3.6 post form日志
16:49:14.092[main]DEBUG io.github.admin4j.http.core.HttpLogger- -->GET http://192.168.1.13:9100/auth/login?q=admin4j http/1.1 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-User-Agent:admin4j 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-Host:192.168.1.13:9100 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-Connection:Keep-Alive 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-Accept-Encoding:gzip 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger- -->END GET 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-<--200OK http://192.168.1.13:9100/auth/login?q=admin4j (575ms) 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-transfer-encoding:chunked 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Origin 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Method 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Headers 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Origin 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Method 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Headers 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-Content-Type:application/json;charset=utf-8 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-Date:Tue,08Nov 2022 08:49:14GMT 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger- 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-{code:406,msg:Full authentication is required to access this resource} 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-<--END HTTP(76-byte body) response=Response{protocol=http/1.1,code=200,message=OK,url=http://192.168.1.13:9100/auth/login?q=admin4j}1.4 在 Springboot 中使用
1.4.1 maven引入
<dependency><groupId>io.github.admin4j</groupId><artifactId>common-http-starter</artifactId><version>0.4.0</version> </dependency>最新版查詢 io.github.admin4j:common-http-starter
spring 版可以對 OkHttp進行個性化配置
1.4.2 配置
public class HttpConfig {/*** 日志等級*/private HttpLoggingInterceptor.Level loggLevel = HttpLoggingInterceptor.Level.BODY;/*** 讀取超時時間,秒*/private long readTimeout = 30;/*** 鏈接超時時間*/private long connectTimeout = 30;private boolean followRedirects = false;/*** 最大的連接數*/private int maxIdleConnections = 5;/*** 最大的kepAlive 時間 秒*/private long keepAliveDuration = 5;private String userAgent = OKHTTP;/*** 是否支持cookie*/private boolean cookie = false;private ProxyConfig proxy;@Datapublic static class ProxyConfig {private Proxy.Type type = Proxy.Type.HTTP;private String host;private Integer port = 80;private String userName;private String password;} }1.4.3 快速封裝外部接口
以實體項目為例,封裝 ebay接口
public class EbayClient extends ApiJsonClient {/*** 店鋪配置** @param storeId*/public EbayClient(Long storeId) {//TODO 獲取店鋪相關配置Map<String, String> config = new HashMap<>();String basePath = "https://api.ebay.com";defaultHeaderMap.put(Authorization, Bearer + config.get(accessToken));defaultHeaderMap.put(X-EBAY-C-MARKETPLACE-ID, config.get(marketplaceId));} }EbayClient 封裝ebay api請求 基礎類
/*** ebay 庫存相關api* @author andanyang*/ public class EbayInventoryClient extends EbayClient {/*** 店鋪配置** @param storeId*/public EbayInventoryClient(Long storeId) {super(storeId);}/*** 庫存列表** @param limit* @param offset* @return* @throws IOException*/public JSONObject inventoryItem(Integer limit, Integer offset) throws IOException {Map<String, Object> queryMap = new HashMap(2);queryMap.put(limit, limit);queryMap.put(offset, offset);return get(/sell/inventory/v1/inventory_item, queryMap);} }EbayInventoryClient 封裝ebay 庫存 api請求
使用
EbayInventoryClient ebayInventoryClient=new EbayInventoryClient(1L); JSONObject jsonObject=ebayInventoryClient.inventoryItem(0,10); /*** 訂單相關api* @author andanyang*/ public class EbayOrderClient extends EbayClient {/*** 店鋪配置** @param storeId*/public EbayOrderClient(Long storeId) {super(storeId);}/*** 訂單列表** @param beginTime* @param endTime* @param limit* @param offset* @return*/public JSONObject orders(String beginTime, String endTime, int limit, int offset) {final String path = /sell/fulfillment/v1/order;String filter = MessageFormat.format(lastmodifieddate:[{0}..{1}], beginTime, endTime);//Map<String, Object> queryMap = new HashMap<>(8);queryMap.put(filter, filter);queryMap.put(limit, limit);queryMap.put(offset, offset);return get(/sell/inventory/v1/inventory_item, queryMap);} }庫存相關的使用EbayInventoryClient,訂單相關的使用EbayOrderClient
轉載于:https://mp.weixin.qq.com/s/FxnAJrIw7eXeDkhxK2S9zA
總結
以上是生活随笔為你收集整理的OKHttpUtil使用讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CTFHUB-网站源码
- 下一篇: win7硬盘分区软件_专业的电脑数据恢复