從api接口獲取數據-okhttp


首先先介紹下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包的同學可以進入下面鏈接搜索下載

https://mvnrepository.com/

 

然后在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM