導航:首頁 > 操作系統 > androidokhttp使用

androidokhttp使用

發布時間:2024-08-31 18:23:48

❶ okhttp使用中自己要處理哪些錯誤和異常

OkHttp是一個相對成熟的解決方案,據說android4.4的源碼中可以看到HttpURLConnection已經替換成OkHttp實現了。所以我們更有理由相信OkHttp的強大。
OkHttp 處理了很多網路疑難雜症:會從很多常用的連接問題中自動恢復。如果您的伺服器配置了多個IP地址,當第一個IP連接失敗的時候,OkHttp會自動嘗試下一個IP。OkHttp還處理了代理伺服器問題和SSL握手失敗問題。
使用 OkHttp 無需重寫您程序中的網路代碼。OkHttp實現了幾乎和java.net.HttpURLConnection一樣的API。如果你用了 Apache HttpClient,則OkHttp也提供了一個對應的okhttp-apache 模塊。

❷ Okhttp 使用詳解

一個最簡單的OkHttpClient

一個復雜點的OkHttpClient配置

具體可配置參數見OkHttpClient.Builder類,幾點注意事項:

兩種攔截器的區別

官方提供的Logging Interceptor

地址: https://github.com/victorfan336/okhttp-logging-interceptor
gradle.build中添加依賴:
compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'

通過Request.Builder創建請求,默認是Get請求

主要是構建RequestBody,並設置Content-Type消息頭。

1.普通Post請求

比如json請求

2. 使用FormBody傳遞鍵值對參數
Content-Type: application/x-www-form-urlencoded
比如:

3. 使用RequestBody傳遞Json或File對象

4. 使用MultipartBody同時傳遞鍵值對參數和File對象

5. 使用MultipartBody提交分塊請求

6. 自定義RequestBody實現流的上傳

1、同步執行

由於android強制要求網路請求在線程中執行,所以無法使用execute

2、非同步執行

1. 設置請求頭

2. 設置超時

3. 設置緩存

1、對於Get請求,如果請求參數較多,自己拼接Url較為麻煩

比如

拼接結果: http://www..com/user/login/username=zhangsan&password=123456

如果能做一些封裝,直接addParam(key,value)的形式則會簡單很多。

2、Callback在子線程中回調,大部分時候,我們都是需要更新UI的,還需自己post到主線程中處理。
3、構建請求步驟比較多
因此,Square提供了針對OkHttp的封裝庫Retrofit,另外Github上也有很多第三方的封裝庫,比如OkGo。

❸ Android使用OkHttp請求自簽名的https網站

很多公司考慮到安全問題,項目中都採用https加密協議進行數據傳輸。但是一些公司又不想花一筆錢去CA申請證書,所以就採用自簽名的證書。

OkHttp默認是可以訪問通過CA認證的HTTPS鏈接,例如網路首頁也是https鏈接( https://www..com/ )。 但是如果是你們公司自簽名(即自己用keytool生成的證書,而不是採用通過CA認證的證書)的伺服器,OkHttp是無法訪問的,例如訪問12306網站( https://kyfw.12306.cn/otn/ ) ,會報如下錯誤:

HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。握手過程的簡單描述如下:

握手過程中如果有任何錯誤,都會使加密連接斷開,從而阻止了隱私信息的傳輸。

以下我們使用12306網站為例

注意:別忘了加許可權和依賴okhttp庫

Demo地址: https://github.com/wildma/okhttps
參考博客: http://blog.csdn.Net/lmj623565791/article/details/48129405

❹ Android通過OKhttp從伺服器端獲取數據

①簡單的異棚洞步Get請求
第一步,創建OKHttpClient對象
第二步,創建Request請求
第三步,創建一個Call對象
第四步,將請求添大和賀加到調度中
不多說,直接上代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

//okHttp的基本使用 --- get方法
String url = "https://api.douban.com/v2/movie/top250?start=0&count=10";
//1,創建OKHttpClient對象
OkHttpClient mOkHttpClient = new OkHttpClient();
//2,創建一個Request
Request request = new Request.Builder().url(url).build();
//3,創建一個call對象
Call call = mOkHttpClient.newCall(request);
//4,將請求添加到調滾派度中
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

}

@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
final String message = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
tv_message.setText(message);
progressBar.setVisibility(View.GONE);
}
});

}
}

});

❺ Android Okhttp/Retrofit網路請求加解密實現方案

比較安全的方案應該是AES+RSA的加密方式。具體如下圖所示。

為什麼要這樣做呢?
1、RSA是非對稱加密,公鑰和私鑰分開,且公鑰可以公開,很適合網路數據傳輸場景。但RSA加密比較慢,據說比AES慢100倍,且對加密的數據長度也有限制。
2、AES是對稱加密,加密速度快,安全性高,但密鑰的保存是個問題,在網路數據傳輸的場景就很容易由於密鑰泄露造成安全隱患
3、所以,AES+RSA結合才更好,AES加密數據,且密鑰隨機生成,RSA用對方(伺服器)的公鑰加密隨機生成的AES密鑰。傳輸時要把密文,加密的AES密鑰和自己的公鑰傳給對方(伺服器)。對方(伺服器)接到數據後,用自己的私鑰解密AES密鑰,再拿AES密鑰解密數據得到明文。這樣就綜合了兩種加密體系的優點。
4、除上面說的外,還可以加簽名,即對傳輸的數據(加密前)先做個哈希,然後用自己的RSA私鑰對哈希簽名(對方拿到自己的公鑰可以驗簽),這樣可以驗證傳輸內容有沒有被修改過。

就java來說,加密的輸入和輸出都是位元組數組類型的,也就是二進制數據,網路傳輸或本地保存都需要重新編碼為字元串。推薦使用Base64。Android 有自帶的Base64實現,flag要選Base64.NO_WRAP,不然末尾會有換行影響服務端解碼。
Android中Base64加密

總而言之,這些不同語言都有實現庫,調用即可,關鍵是參數要一致,具體還需要和後台聯調一下。
rsa加解密的內容超長的問題解決

現在說到網路框架,應該毫無疑問是Retrofit了。上面說的加密方案說到底還是要在網路請求框架內加上,怎麼做入侵最小,怎麼做最方便才是重點。
1、坑定不能直接在介面調用層做加密,加參數,這樣每個介面都要修改,這是不可能的。
2、ConverterFactory處理,這也是網上可以搜到的很多文章的寫法,但我覺得還是有入侵。而且有點麻煩。
3、OkHttp添加攔截器,這種方法入侵最小(可以說沒有),實現呢也非常優雅。
下面的實現,網上也找不到多少可以參考的文章,但不得不說,OkHttp的封裝和設計真的很好用,所見即所得。看下源碼,就知道該怎麼用了,連文檔都不用查。

主要注意點:
0、和介面無關的新加的數據放在請求頭里。
1、該close的要close,不然會內存泄漏。
2、新舊Request和Response要區分好,新的要替換舊的去傳遞或返回。
3、要對response.code()做處理,只有在和後台約定好的返回碼下才走解密的邏輯,具體看自己的需求,不一定都是200。

閱讀全文

與androidokhttp使用相關的資料

熱點內容
生存為什麼不能使用命令方塊 瀏覽:204
java與sqlserver資料庫連接 瀏覽:21
鐵路解壓視頻全過程 瀏覽:442
主備核心交換機如何連接伺服器 瀏覽:704
白金卡哪個app最靠譜 瀏覽:666
本田汽車空調壓縮機保險絲 瀏覽:155
康佳led47r5500pdf通病 瀏覽:821
cad圓相切命令 瀏覽:69
bmp文件夾打開 瀏覽:502
u盤裝系統文件下載到哪個文件夾 瀏覽:21
es系統封裝教程程序員大本營 瀏覽:523
程序員聚餐喝什麼酒好 瀏覽:608
編譯程序生成安裝文件 瀏覽:955
linux查看usb設備 瀏覽:284
安卓怎麼禁止app充值 瀏覽:559
動盪對加密貨幣的影響 瀏覽:358
國家反詐app哪裡看注冊時間 瀏覽:563
打孔式文件夾怎麼裝視頻 瀏覽:29
php怎麼學比較好 瀏覽:381
python中關於函數調用 瀏覽:362