在開發應用程式的時候常會需要連到網際網路上取得一些資料或是傳送一些資料出去,而這當中最常使用的協定就是HTTP/HTTPS了!在Rust程式語言中,若要使用HTTP、HTTPS協定來進行連線,在crates.io上雖然已經有很多現成的HTTP客戶端套件可以使用,但用起來大多很複雜,有的還會需要連結許多動態函式庫,導致程式不容易被部署。
Easy HTTP Request
「Easy HTTP Request」是筆者開發的套件,利用「hyper」這個Rust生態圈最常用的HTTP函式庫來完成的簡易HTTP客戶端。提供GET、POST、PUT、DELETE、HEAD這五種常用的HTTP請求方法,無需處理「future」相關的程式(所以會在同一個執行緒下運作),可以限制URL資源的回應大小、轉址次數、連線時間上限,也可以設定是否要允許連到內部網路(包含本地端和區域網路)的網址。
Crates.io
Cargo.toml
使用方法
easy_http_request
這個crate提供的HttpRequest
結構體,可以設定HTTP請求的標頭(headers)、查詢(query)和主體(body),資料類型使用泛型。如果想要方便一點,讓它們的資料類型都是靜態的字串切片的話,可以使用StaticHttpRequest
這個型別來產生HttpRequest
的結構實體。如果想要讓它們的資料類型都是String
結構體的話,可以使用DefaultHttpRequest
這個型別來產生HttpRequest
的結構實體。
HttpRequest
結構體提供了get
、post
、put
、delete
和head
這五種關聯函數來快速產生HttpRequest
的結構實體,且這五種關聯函數都另外有以_from_url_str
結尾的函數(如get_from_url_str
)。
最基本的使用範例如下:
use easy_http_request::DefaultHttpRequest;
fn main() {
let response = DefaultHttpRequest::get_from_url_str("https://tool.magiclen.org/ip").unwrap().send().unwrap();
println!("{}", String::from_utf8(response.body).unwrap());
}
以上程式可以印出目前電腦的對外IP。
HttpRequest
的結構實體在使用send
方法之後,擁有權就會被拿走,而不能再被使用了。如果要重複使用同一個HttpRequest
的結構實體來發送請求的話,就要使用send_preserved
方法。
另外,預設能接收的HTTP回應大小上限為1 MiB,如果想要更改,可以去設定HttpRequest
結構實體的max_response_body_size
欄位;預設能轉跳的次數為5次,如果想要更改,可以去設定HttpRequest
結構實體的max_redirect_count
欄位;預設並不會限制連線時間,如果想要更改,可以去設定HttpRequest
結構實體的max_connection_time
欄位,時間單位是毫秒;預設會允許存取內部的網址,如果想要更改,可以去設定HttpRequest
結構實體的allow_localhost
欄位。