問題
在最近的一次調(diào)試過程中字旭,發(fā)現(xiàn)網(wǎng)絡(luò)良好的狀況下据沈,F(xiàn)lutter 頁面網(wǎng)絡(luò)請求出現(xiàn)快速失敗的問題捶牢。而比較奇怪的是鸠珠,如果使用配置好的代理(proxy)后,網(wǎng)絡(luò)錯誤卻消失了秋麸。
解決過程
最直接的想法是看 HttpClient
中報錯的異常信息到底是什么渐排,在重現(xiàn)的設(shè)備上觀察到,在進行 GET
請求時它報出了類似 " Invalid proxy :0 "
的錯誤消息灸蟆。此時問題似乎比較明朗了 驯耻,某種條件下讀取的設(shè)備proxy出現(xiàn)了無效值:host值變?yōu)? ",端口port值變?yōu)榱?0 炒考。
同時問題可以在部分手機上重現(xiàn)了:設(shè)備上正確配置好proxy之后可缚,隨即停用proxy;此時新創(chuàng)建的HttpClient
使用了native端System.getProperty("http.proxyHost")
與 System.getProperty("http.proxyPort")
讀取到的 " :0"
配置了proxy斋枢,進而導(dǎo)致后續(xù)請求出現(xiàn)網(wǎng)絡(luò)錯誤 ?帘靡。
小結(jié)
- 需要嚴(yán)格檢測讀取系統(tǒng)proxy信息的有效性,強化以及定義好 Flutter / Native channel API杏慰;
- 一般情況下只在開發(fā)階段啟用Proxy测柠,不干擾生產(chǎn)環(huán)境代碼邏輯。