在 Rust 中,使用 reqwest 進行數據壓縮非常簡單。你只需要在請求頭中設置 Accept-Encoding
為 gzip
或 deflate
,然后 reqwest 會自動處理壓縮和解壓縮。這里是一個簡單的示例:
首先,確保你的 Cargo.toml
文件中包含了 reqwest 和 flate2 依賴:
[dependencies]
reqwest = { version = "0.11", features = ["json"] }
flate2 = "1.0"
然后,你可以編寫如下代碼來發送一個帶有 gzip 壓縮的 POST 請求:
use reqwest::{Client, Error};
use flate2::read::GzDecoder;
use std::io::Read;
#[tokio::main]
async fn main() -> Result<(), Error> {
// 創建一個新的客戶端
let client = Client::new();
// 要發送的數據
let data = b"This is the data to be compressed and sent.";
// 創建一個 Gzip 解碼器
let mut decoder = GzDecoder::new(data);
// 讀取解碼后的數據
let mut decompressed_data = Vec::new();
decoder.read_to_end(&mut decompressed_data)?;
// 發送帶有 gzip 壓縮的 POST 請求
let response = client
.post("https://your-api-url.com")
.header("Content-Encoding", "gzip")
.header("Accept-Encoding", "gzip")
.body(decompressed_data)
.send()
.await?;
// 處理響應
println!("Response status: {}", response.status());
println!("Response body: {:?}", response.text().await?);
Ok(())
}
這個示例中,我們首先創建了一個 reqwest 客戶端,然后將要發送的數據放入一個 GzDecoder 中進行解壓縮。接下來,我們將解壓縮后的數據作為請求體發送,并在請求頭中設置了 Content-Encoding
和 Accept-Encoding
為 gzip
。最后,我們處理響應并輸出狀態碼和響應內容。