1. 程式人生 > >[HTTP那些事]網路請求API

[HTTP那些事]網路請求API


在Android上,原生API有兩個,HttpUrlConnection和HttpClient,它們對封裝Socket進行封裝,讓HTTP請求變得簡單。這應該也算框架吧?

想象下,如果沒有HttpUrlConnection和HttpClient,一次性的API請求得有多麻煩。

現在,我們又多了一種OkHttp,Square出品。當然底層還是封裝socket。為什麼,為什麼還要再出一個OkHttp,吃飽了撐的?肯定不是,那究竟有什麼好的?自己動手查一下吧。

我們假設一下,應該是HttpUrlConnection和HttpClient自身有bug和缺陷,所以才會再根據如今的網路情況設計OkHttp吧。

如果你看過Volley的原始碼,就知道當SDK>9時,預設使用HttpUrlConnection,<9的就用HttpClient。 

既然>9採用HttpUrlConnection了,那說明,再以後的版本中由Android修復了,那HttpClient呢,Apache更新維護太慢,基本要被淘汰。

如果說你的專案還在用HttpClient,甚至還在為HttpClient的某些bug而苦惱,那麼你該考慮是否該換了。畢竟現實不可能給你那麼多時間去調研debug。

當然OkHttp也是有bug的,從github上的issues就能知道,如果你用OkHttp發現了bug,又不知道如何解決,不妨去那看看。

說了這麼多,Stay想表達的有兩層意思: 
1. 不妨使用新技術來解決老技術的缺陷,就好像如果現在還有人用TabActivity,TabHost,那給人感覺一定是做外包出身的。 
2. 嘗試新技術的成本不高的,如果它開源,並且有release版本(1.0+),你都可以整合試試。新技術都是為了更好的開發而被設計出來的,就算它不是最優的解決方案,至少設計理念,解決思路是值得參考的。

今天下午花了點時間,粗略的過了一遍OkHttp,有意思的是,為了讓大家無縫整合,也是蠻拼的,額外提供HttpUrlConnection和HttpClient的寫法。你只需要再依賴okhttp-urlconnection.jar或者okhttp-apache.jar就可以了。

本來Stay是打算用OkHttp自己的請求API整合的自己的網路框架裡,搗鼓了半天,怪麻煩的,API來來回回要找半天,索性就直接換成HttpUrlConnection的形式寫了。 

see, 整合起來太方便了。簡單的測試了下,get,post,上傳,下載都沒問題。其他就沒再深入了。 

程式碼已在Stay講的[自己動手寫個Http框架]中更新,想嚐鮮的可以去看看。

OkHttp的示例都很簡單,有很多配置(ssl, cookies, headers, timeout)沒詳細說明,那如果你想配置,該怎麼做捏。可以看原始碼,也可以看一些網路請求框架如:Retrofit(Square的網路請求框架,預設整合OkHttp)原始碼中的API配置。


對於這類底層API創新,還是比較少的,幾年內能出一個就不錯了,畢竟對HTTP協議融會貫通而且能優化的大牛少之又少。對於一般的苦逼開發者來說,能做到及時跟進已屬不易。

多嘗試新技術,至少可以晚些結束自己的程式設計師生涯 :)

有心課堂,傳遞給你的不僅僅是技術。✈️ www.stay4it.com

相關推薦

[HTTP那些]網路請求API

在Android上,原生API有兩個,HttpUrlConnection和HttpClient,它們對封裝Socket進行封裝,讓HTTP請求變得簡單。這應該也算框架吧? 想象下,如果沒有HttpUrlConnection和HttpClient,一次性的API請求得有多麻煩。 現在,我們又多了一種OkHt

Spring boot 那些之RESRful API 許可權控制

Spring boot 那些事之RESRful API 許可權控制 泥瓦匠BYSocket 生活者 39 人讚了該文章 Spring Boot,支援約定優於配置,讓開發人員儘快啟動並執行專案。針對 Spring Boot 的學習和總結準備寫系列文章。 程式碼共享在【s

iOS開發之HTTP與HTTPS網路請求

HTTP是網際網路中應用最為廣泛的一種網路協議,在進入正文之前,先解釋什麼是網路協議?網路協議為計算機網路中進行資料交換而建立的規則、標準或約定的集合。網路協議是由以下三個要素組成:語義、語法、時序。 (1) 語義 語義是解釋控制資訊每個部分的意義。它規定了需要發出何種控制資訊,

使用Retrofit進行Http、Https網路請求(快速上手)

1.配置gradle //註解包 compile 'com.jakewharton:butterknife:7.0.0' //Retrofit2所需要的包//這裡需要值得注意的是匯入的retrofit2包的版本必須要一致,否則就會報錯compile 'com.squareu

Flutter -------- Http庫實現網路請求

第三方庫 http實現網路請求,包含get,post   http庫文件:https://pub.dev/packa

ASP.NET C# 判斷HTTP來源型別,取得HTTP 請求(GET, POST)引數 « 關於網路那些...

ASP.NET C# 判斷HTTP來源型別,取得HTTP 請求(GET, POST)引數 透過 C# for ASP.NET 的 Response 可以取得HTTP請

ASP.NET C# 判斷 HTTP REQUEST 請求來源 KEY 是否存在 « 關於網路那些...

ASP.NET C# 判斷 HTTP REQUEST 請求來源 KEY 是否存在 HTTP 請求來源可以為 POST 或 GET 型別,並且夾帶 key 與 valu

IOS —— 網路那些(上) - http協議

作為一名並不太合格的程式設計師,今天要分享學習的成果,竟然講的是網路相關HTTP協議的事情。(也算是複習了) 乍看HTTP協議的內容著實是十分複雜的,涉及到十分多網際網路"底層"框架的東西。今天就先撇開這部分詳細內容。 簡單的來說說HTTP協議,以及連線的事項。 HTTP協議發展至今也有二十多年曆史,版

Java 和 HTTP那些之模擬 HTTP 請求

一、使用 HttpURLConnection 傳送 HTTP 請求 Java 自帶的 java.net 這個包中包含了很多與網路請求相關的類,但是對於我們來說,最關心的應該是 HttpURLConnection 這個類了。 1.1 建立 HTTP 連線物件 要得到一個 

PHP, Larave, Nginx 設定Header允許請求 CORS 的幾種方式 « 關於網路那些...

跨域資源共享 CORS (Cross-origin resource sharing) 是一個 W3C 標準 這裡主要針對 php (Laravel) 以及 ngi

http你不得不知道的那些(六)--請求響應細節

http相關的東西也寫了好幾篇了,但是一直都在涉及http周邊的東西,最核心最底層的沒有涉及到。本篇就要揭開網路請求的神祕面紗,將最底層的東西以最簡單的方式呈現給大家。 那就得先講講OSI七層模型,OSI(Open System Interconnect),即

關於簡訊傳送與HTTP請求那些

public static boolean sendSmsActivateFriends(String mobile, String content, String type) { //簡訊傳送開關 if(UN_SMS_SWITCH.equals("1")){ HttpClient cli

Fetch API與POST請求那些

## 簡述 相信不少前端開發童鞋與後端聯調介面時,都會碰到前端明明已經傳了引數,後端童鞋卻說沒有收到,尤其是`post`請求,遇到的非常多。本文以`node.js`作為服務端語言,借用`express`框架,簡要分析客戶端傳送`post`請求的四種方式以及服務端如何接收。本文客戶端請求沒有藉助第三方`aja

關於tcp、http可能你想知道的那些

encoding 表單 短連接 emp Go 輸入 網絡 tran 握手 TCP/IP 協議分層模型 物理層將二進制的0和1和電壓高低,光的閃滅和電波的強弱信號進行轉換 鏈路層代表驅動 網絡層 使用 IP 協議,IP 協議基於 IP 轉發分包數據 IP 協議是個不可靠

Http那些: Content-Type

article hba 數據 找不到 oschina dex ria ack null Content-Type 無疑是http中一個非常重要的屬性了, request 中可以存在, 也可以不存在( request的Content-Type 默認是 */*, 實際上呢, 如

【搜尋那些】細談lucene(三)lucene核心API簡介

經過前面的簡單理論介紹,相信大家對搜尋引擎lucene有個簡單的瞭解。前面我們也提到過在lucene中主要包括索引和搜尋這兩大方面的元件。今天我們我們就通過一個簡單的例項來看一下lucene給我們提供的有關這兩個元件的簡單用法。 一:建立索引 在用lucene搜尋之前,我們首先要做的

HTTP網路請求GSON解析網路不可用跳轉到設定

//1主 mainactivity介面 package com.example.guoxinyu20181101; import android.annotation.SuppressLint; import android.content.DialogInterface; import

IOS —— 網絡那些(上) - http協議

出貨量 http1.0 也有 ont strong 處理 事情 服務 並且 作為一名並不太合格的程序員,今天要分享學習的成果,竟然講的是網絡相關HTTP協議的事情。(也算是復習了) 乍看HTTP協議的內容著實是十分復雜的,涉及到十分多互聯網"底層"框架的東西。今天就先撇開這

Android 9.0/P http 網路請求的問題

Google表示,為保證使用者資料和裝置的安全,針對下一代 Android 系統(Android P) 的應用程式,將要求預設使用加密連線,這意味著 Android P 將禁止 App 使用所有未加密的連線,因此執行 Android P 系統的安卓裝置無論是接收或者傳送流量,未來都不能明碼傳輸,需要使用下一代

http請求過程(訪問一個頁面,發生了怎樣的網路請求?)

域名解析->域名 ->快取->根域dns->頂級域dns->本域dns->伺服器IP 1.搜尋瀏覽器自身DNS快取,如果不存在或者過期(>60s)放棄 2.搜尋作業系統自身的dns快取 3.讀取本地的HOST檔案 4.瀏覽器發起一個DNS的