首先先介紹下api接口:
API:應用程序接口(API:Application Program Interface)
通常用於數據連接,調用函數提供功能等等。。。
從api接口獲取數據有四種方式:HttpClient、HttpURLConnection、OKHttp 和 Volley。
之前項目中用到了OKHttp3,項目做好了,但這方面知識還沒完全掌握,寫篇隨筆爭取理解多一些 = =
OkHttp 是一個現代、快速、高效的 Http client,支持 Http/2 以及 SPDY,扮演着傳輸層的角色,
OkHttp 使用 Okio 來打打簡化數據的訪問與存儲,Okio是一個增強 java.io 和 java.nio 的庫。。。。and so on
OkHttp 的基本用法(現在OkHttp3是比較新的版本,通常用這個多一些):
首先導入jar包,沒有jar包的同學可以進入下面鏈接搜索下載

然后在pom.xml進行配置(version 要對上,和你引入的okhttp jar包版本一致)

下面是從網上偷的代碼:https://www.jianshu.com/p/1873287eed87
如果是Get請求:
1 String url = "https://www.baidu.com"; 2 OkHttpClient okHttpClient = new OkHttpClient(); 3 Request request = new Request.Builder() 4 .url(url); 5 .build(); 6 Call call = okHttpClient.newCall(request); 7 try{ 8 Response reponse = call.excecute(); 9 System.out.println(response。body().string()); 10 }catch(IOExcption e){ 11 e.printStackTrace(); 12 }
如果需要在request的header添加參數,如cookie、User-Agent什么的 , 就寫成這樣:
1 Request request = new Request.Builder() 2 .url(url) 3 .header("key","value") 4 .header("key","value") 5 ... 6 .build();
注意:
url 為 api 數據源,需要根據自身情況調用相應的api。
response的body有很多種輸出方法,string() 只是其中之一,注意是string() 不是toString()。
如果是下載文件就是response.body().bytes(),
另外可以根據response.code() 獲取返回的狀態碼。
-----------------------------------------------------------------------------------------------------------------------------------------
如果是Post請求:
1 String url = "https://baidu.com"; 2 OkHttpClient okHttpClient = new OkHttpClient(); 3 4 RequestBody body = new FormBody.Builder() 5 .add("key","value"); 6 .add("key","value"); 7 ... 8 .build(); 9 10 Request request = new Request.Builder() 11 .url(url) 12 .post(body) 13 .build(); 14 15 Call call = okHttpClient.newCall(request); 16 try{ 17 Response reponse = call.execute(); 18 System.out.println(response.body().string()); 19 }catch{ 20 e.printStackTrace(); 21 }
post 請求創建 request 和 get 是一樣的,只是post請求需要提交一個表單——ResponseBody
表單格式有很多種,普通表單:
1 RequestBody body = new FormBody.Builder() 2 .add("鍵", "值") 3 .add("鍵", "值") 4 ... 5 .build();
RequestBody 的數據格式都要指定 Content-Type ,常見有三種:
application/x-www-form-urlencoded 數據是個普通表單
multipart/form-data 數據里有文件
application/json 數據是個json
但是上面代碼中的表單並沒有指定Content-Type這是因為FormBody繼承了RequestBody,它已經指定了數據類型為application/x-www-form-urlencoded。
1 private static final MediaType CONTENT_TYPE = MediaType.parse("application/x-www-form-urlencoded");
如果表單是 json:
1 MediaType JSON = MediaType.parse("application/json;charset = utf-8"); 2 RequestBody body = RequestBody.create(JSON,"你的JSON");
如果表單包含文件:
1 RequestBody requestBody = new MultipartBody.Build() 2 .setType(MultipartBody.FORM) 3 .addFormDataPart("file",file.getName(),RequestBody.create(MediaType.parse("image/png"),file)) 4 .build();
上面的 MultipartBody也是繼承了RequestBody,看下源碼可知它適用於這五種Content-Type:
public static final MediaType MIXED = MediaType.parse("multipart/mixed"); public static final MediaType ALTERNATIVE = MediaType.parse("multipart/alternative"); public static final MediaType DIGEST = MediaType.parse("multipart/digest"); public static final MediaType PARALLEL = MediaType.parse("multipart/parallel"); public static final MediaType FORM = MediaType.parse("multipart/form-data");
另外還可以參考這個鏈接中的內容,還寫了其他三種api接收數據的方式,很具體很細節~
https://www.2cto.com/kf/201607/521798.html
創造接口:
https://blog.csdn.net/qq_35731570/article/details/69937457
restful
urlrewrite
https://blog.csdn.net/kkkkkjava/article/details/78296845

