當前位置:首頁 » 安卓系統 » androidhttp請求

androidhttp請求

發布時間: 2023-01-26 07:06:42

① Android高版本http網路請求失敗的Cordova配置處理

問題出現的原因是因為Android高版本(Android 6.0)以上默認使用TLS保護用戶信息,詳見以下文檔:
Transport Layer Security

摘錄關鍵信息如下:

簡單地說,在Android高版本對非加密的明文傳輸有要求,也即默認啟用了TLS保護,使得該應用無法進行http網路請求,而https則不會受影響,同樣地,如果應用嵌套了webview也會受這限制。

針對這種情況,有以下解決方案:

然後在AnroidManifest.xml中的application添加指向該文件的設置項:
android:networkSecurityConfig="@xml/network_security_config"

綜合考量,第3種方案個人認為會好點,Cordova配合其使用也很簡單:

在config.xml文件中,在 <platform name="android"/> 節點內添加配置項即可:

這樣Cordova build的時候就會把上面配置合並到AnroidManifest.xml中。

② Android版本28使用http請求報錯not permitted by network security policy

解決辦法:
1 targetSdkVersion 降級回到 27 (沒測試)
2 伺服器和本地應用都改用 https (推薦)(沒測試)
3 在 res 下新建一個 xml 目錄,然後創建一個名為:network_security_config.xml 文件 ,該文件內容如下

在 AndroidManifest.xml application增加配置android:networkSecurityConfig="@xml/network_security_config"

③ 說說在 Android 中如何發送 HTTP 請求

客戶端會向伺服器發出一條 HTTP 請求,伺服器收到請求後會返回一些數據給客戶端,然後客戶端再對這些數據進行解析與處理。

可以使用 HttpURLConnection(官方推薦) 來發送 HTTP 請求。

布局文件:

活動類:

因為在 Android 中不允許在子線程中執行 UI 操作,所以我們通過 runOnUiThread 方法,切換為主線程,然後再更新 UI 元素。

最後記得聲明網路許可權哦:

OKHttp 是一個處理網路請求的開源項目,目前是 Android 最火熱的輕量級框架,由移動支付 Square 公司貢獻(該公司還貢獻了Picasso)。希望替代 HttpUrlConnection 和 Apache HttpClient。

首先引入 OKHttp 庫依賴:

然後點擊 Android Studio 右上角的 Sync Now,把庫真正載入進來。

修改活動類:

可以在 build() 方法之前連綴很多其他方法來豐富這個 Request 對象。

如果是 POST 請求,那麼需要構建 RequestBody 對象,形如:

修改活動類:

注意: new Thread(...) 之後需要執行 start() 才會啟動線程哦。

運行:

可以看出,OKHttp 比 HttpURLConnection 更強大:同一個網址,OKHttp 能夠正確地返回響應數據哦O(∩_∩)O哈哈~

④ android okhttp https請求

 忽略SSL證書的方法

//獲取TrustManager

    private static TrustManager[] getTrustManager() {

        //不校檢證書鏈

        TrustManager[] trustAllCerts = new TrustManager[]{

                new X509TrustManager() {

                    @Override

                    public void checkClientTrusted(X509Certificate[] chain, String authType) {

                        //不校檢客戶端證書

                    }

                    @Override

                    public void checkServerTrusted(X509Certificate[] chain, String authType) {

                        //不校檢伺服器證書

                    }

                    @Override

                    public X509Certificate[] getAcceptedIssuers() {

                        return new X509Certificate[]{};

                        //OKhttp3.0以前返回null,3.0以後返回new X509Certificate[]{};

                    }

                }

        };

        return trustAllCerts;

    }

//獲取這個SSLSocketFactory

    //通過這個類我們可以獲得SSLSocketFactory,這個東西就是用來管理證書和信任證書的

    public static SSLSocketFactory getSSLSocketFactory() {

        try {

            SSLContext sslContext = SSLContext.getInstance("SSL");

            sslContext.init(null, getTrustManager(), new SecureRandom());

            return sslContext.getSocketFactory();

        } catch (Exception e) {

            throw new RuntimeException(e);

        }

    }

//獲取HostnameVerifier

    public static HostnameVerifier getHostnameVerifier() {

        HostnameVerifier hostnameVerifier = new HostnameVerifier() {

            @Override

            public boolean verify(String s, SSLSession sslSession) {

                //未真正校檢伺服器端證書域名

                return true;

            }

        };

        return hostnameVerifier;

    }

public OkHttpClient getOkHttpClient() {

        if (mOkHttpClient == null) {

            mOkHttpClient = new OkHttpClient.Builder()

                    .connectTimeout(15, TimeUnit.SECONDS)

                    .sslSocketFactory(new SSLSocketClient().getSSLSocketFactory())//配置

                    .hostnameVerifier(new SSLSocketClient().getHostnameVerifier())//配置

                    // .readTimeout(10, TimeUnit.SECONDS)

                    .build();

        }

        return mOkHttpClient;

    }

原文鏈接: Android https請求證書處理

⑤ 請問Android 發送大量的http請求怎麼做最好呢

你應該寫清楚應用場景,懶得寫代碼,只寫思路
分兩種使用場景吧,第一種,就是無腦post,對伺服器造成很大負擔(如果這就是你的目的),那你只需要寫個timer循環,每隔一秒或者幾秒post服務端就行了
第二種,在get到結果後循環post,這個方式比較合理,不需要timer循環,對伺服器負荷也小,需要一個hanlderMessage,在get到結果或異常後給hanlderMessage發送消息,handlerMessage再執行一次post即可

⑥ Android網路請求庫【OkHttp4.9.3】基本用法與原理分析

OkHttp是一套處理 HTTP 網路請求的依賴庫,由 Square 公司設計研發並開源,目前可以在 Java 和 Kotlin 中使用。對於 Android App 來說,OkHttp 現在幾乎已經占據了所有的網路請求操作,Retrofit + OkHttp實現網路請求似乎成了一種標配。因此它也是每一個 Android 開發工程師的必備技能,了解其內部實現原理可以更好地進行功能擴展、封裝以及優化。

OkHttp的高效性體現在:

第一步:創建OkHttpClient,創建OkHttpClient有兩種方式:

OkHttpClient提供了豐富的配置方法,例如添加攔截器、指定連接池、設置請求超時等等。

第二步:創建請求

使用Request.Builder() 構建Request實例

第三步:發起網路請求

OkHttp支持同步和非同步兩種請求方式

OkHttp的使用方法非常簡單,三步操作就可以發起一個簡單的同步或非同步請求。我們也可以很輕松地對網路請求進行配置,例如添加請求頭、設置請求方式、設置請求超時等等,這些配置參數會在源碼分析過程中詳細介紹。

現在我們已經學會了三步操作發起網路請求,接下來以這三個步驟為切入點,深入到源碼中學習OkHttp的實現原理,廢話少說馬上開車。

OkHttpClient創建方式有兩種,我們看看兩種方式有什麼區別。

第一種直接使用默認構造函數,內部依然是使用建造者模式

第二種使用建造者模式

兩種方式最終都是調用構造函數OkHttpClient(builder:Builder),由參數builder負責所有的參數配置工作。

當您創建單個OkHttpClient實例並將其用於所有 HTTP 調用時,OkHttp 性能最佳。 這是因為每個OkHttpClient都擁有自己的連接池和線程池,重用連接和線程可減少延遲並節省內存。 相反,為每個請求創建一個客戶端會浪費空閑池上的資源。

Request同樣使用建造者模式來創建,這里貼上部分重要源碼,很簡單就不細說了。

OkHttp發起網路請求分為同步請求和非同步請求兩種方式,我們只分析非同步請求流程,因為只要理解了非同步請求過程,基本上也就明白同步請求是怎麼一回事了。

RealCall是連接應用層與網路層的橋梁,負責處理連接、請求、響應和數據流。

Dispatcher維護著一套非同步任務執行策略,分析策略之前先介紹幾個重要概念:

client.dispatcher.enqueue(AsyncCall(responseCallback)) 執行步驟為:

AsyncCall實現了Runnable介面,因此一旦被線程池中的線程處理就會調用它的run()方法:

話休絮煩,我們開始分析攔截器責任鏈:

責任鏈執行流程:首先獲取當前攔截器interceptor,並且調用interceptor.intercept(next)執行攔截器操作。這里的next表示的是index+1後的責任鏈對象,攔截器的intercept()方法內部會調用next.proceed(request)方法再次進入到責任鏈,由於此時index已經加1,所以處理的是下一個攔截器。

如此循環往復,直到處理完責任鏈上最後一個攔截器為止。

注意除最後一個攔截器CallServerInterceptor不會調用chain.proceed(request)方法之外,其他攔截器都應該至少調用一次chain.proceed(request)方法。

為了驗證上面的結論,我們進入到RetryAndFollowUpInterceptor的intercept()方法一探究竟:

可以看到注釋1處重新進入責任鏈處理下一個攔截器。

有興趣可以自行查看最後一個攔截器CallServerInterceptor源碼,此處只給出本人閱讀源碼後得出的結論:

以上就是攔截器責任鏈的工作流程,我們再通過流程圖仔細感受一下。

分析完攔截器責任鏈,我們繼續分析AsyncCall#run()方法:

我們看到,如果()方法成功獲得服務端返回的數據,則調用responseCallback.onResponse([email protected], response)方法完成非同步回調;如果服務端數據獲取失敗(請求異常),則調用responseCallback.onFailure([email protected], canceledException)方法完成非同步回調

需要注意的是,responseCallback回調是在子線程中完成的,所以如果想把數據顯示到UI上,需要切換回主線程進行UI操作。

OkHttp發起網路請求全過程:

【知識點】OkHttp 原理 8 連問

⑦ 完美解決Android 9.0以上HTTP網路請求被限制問題

Android P 9.0以上系統,HTTP網路被限制。HTTPS無影響。
Android 10系統同樣的問題。
Android P以上要求網路請求必須為Https,Http請求會拋異常。

  Android P以上的應用默認都被限制了明文流量的網路請求,非加密的流量請求都會被系統禁止掉。同時,目標API級別為27或更低的應用程序的默認值為「 true」。面向API級別28或更高級別的應用默認為「 false」。

需要在AndroidManifest.xml文件中設置:

  android:usesCleartextTraffic 指示應用程序是否打算使用明文網路流量,例如明文HTTP。

忽略證書,可以使用明文流量訪問,https&http都可以訪問。

  避免明文通信的主要原因是缺乏機密性,真實性和防篡改保護;網路攻擊者可以竊聽所傳輸的數據,並且還可以對其進行修改而不會被檢測到。

別忘記在Android.Manifest.xml文件中添加網路訪問許可權哦!

⑧ android9.0以上http請求失敗的解決方法

在android9.0以上由於安全性高了,所有不做處理http不能使用,有3中解決方法
1.最簡單的方法降級targetSdkVersion的版本
將 targetSdkVersion 將到27或27以下

2.伺服器請求http改為https (推薦)
推薦使用這個方法,畢竟https的安全行高

3.兼容http請求
(1):在清單文件中設置networkSecurityConfig屬性

(2)在res/xml文件夾下創建network_security_config.xml

⑨ Android 我的一個APP有時會出現HTTP請求失敗的情況,其他應用正常聯網,重啟後恢復正常

是不是沒有在非同步線程中請求數據

⑩ Android中允許開啟HTTP請求

Android 7後默認禁止了非HTTPS請求,如果在請求中使用HTTP會報如下錯誤:

我們可以在Manifest的Application節點配置 networkSecurityConfig 屬性來自定網路安全策略,如下:

在 \res\xml 目錄下新建 network_security_config.xml 文件:

更多具體描述可以參考 官方文檔

熱點內容
大疆緩存設置 發布:2023-02-06 20:31:22 瀏覽:123
聖安地列斯安卓11怎麼下 發布:2023-02-06 20:29:48 瀏覽:475
雙創基金配置了哪些股票 發布:2023-02-06 20:25:35 瀏覽:964
如何修改系統配置信息 發布:2023-02-06 20:20:19 瀏覽:834
把源碼 發布:2023-02-06 20:20:01 瀏覽:254
字元串的存儲長度 發布:2023-02-06 20:16:53 瀏覽:978
影視文學腳本格式範例 發布:2023-02-06 20:12:04 瀏覽:892
英短貓的食物怎麼配置 發布:2023-02-06 20:09:49 瀏覽:939
存儲接伺服器 發布:2023-02-06 20:09:42 瀏覽:975
sqlupdate數據 發布:2023-02-06 19:55:58 瀏覽:717