Java呼叫Http介面
阿新 • • 發佈:2021-12-17
1、背景
- HTTP協議(HyperText Transfer Protocol,超文字傳輸協議)是因特網上應用最為廣泛的一種網路傳輸協議,所有的WWW檔案都必須遵守這個標準。
- HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等)。
2、呼叫方式
- JDK自帶的方式(HttpURLConnection,Socket)、Apache下的HttpClient、OKhttp、Springboot下的RestTemplate、Feign
3、詳解
HttpURLConnection
在JDK的java.net包中已經提供了訪問HTTP協議的基本功能的類:HttpURLConnection。HttpURLConnection是Java的標準類,它繼承自URLConnection,可用於向指定網站傳送GET請求、POST請求。
Socket
Socket是底層實現,協議你要自己去寫,不侷限於http,可以是任何協議。相對於HttpURLConnection是對http專屬協議的封裝.
HttpClient
- 在一般情況下,如果只是需要向Web站點的某個簡單頁面提交請求並獲取伺服器響應,HttpURLConnection完全可以勝任。但在絕大部分情況下,Web站點的網頁可能沒這麼簡單,這些頁面並不是通過一個簡單的URL就可訪問的,可能需要使用者登入而且具有相應的許可權才可訪問該頁面。在這種情況下,就需要涉及Session、Cookie的處理了,如果打算使用HttpURLConnection來處理這些細節,當然也是可能實現的,只是處理起來難度就大了。
- 為了更好地處理向Web站點請求,包括處理Session、Cookie等細節問題,Apache開源組織提供了一個HttpClient專案,看它的名稱就知道,它是一個簡單的HTTP客戶端(並不是瀏覽器),可以用於傳送HTTP請求,接收HTTP響應。但不會快取伺服器的響應,不能執行HTML頁面中嵌入的Javascript程式碼;也不會對頁面內容進行任何解析、處理。
- 簡單來說,HttpClient就是一個增強版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection沒有提供的有些功能,HttpClient也提供了,但它只是關注於如何傳送請求、接收響應,以及管理HTTP連線。
OKhttp
- OkHttp 是 Square 公司開源的一款網路框架,封裝了一個高效能的 http 請求庫。
RestTemplate
- Spring 提供的用於訪問Rest服務的客戶端, RestTemplate 提供了多種便捷訪問遠端Http服務的方法,能夠大大提高客戶端的編寫效率。
- 面向對 RESTful Web 服務呼叫的功能。
Feign
- Feign是一個宣告式WebService客戶端。使用Feign能讓編寫Web Service客戶端更加簡單, 它的使用方法是定義一個介面,然後在上面添加註解,同時也支援JAX-RS標準的註解。Feign也支援可拔插式的編碼器和解碼器。
- Feign在預設情況下使用的是JDK原生的URLConnection傳送HTTP請求,沒有連線池,但是對每個地址會保持一個長連線,即利用HTTP的persistence connection 。 我們可以用HTTP Client 或 OKhttp 替換Feign原始的http client, 從而獲取連線池、超時時間等與效能息息相關的控制能力