同期・非同期のreqwestの使い方
この記事の目的
Zabbix APIを叩く簡単なCLIツールを作ろうと思ったけど、リクエスト作るだけで結構苦労したので次使うときのためにメモ。
※reqwest 0.10.4 を対象
参考
導入
Cargo.tomlの[dependences]にcrateを追加
[dependences] reqwest = { version = "0.10", features = ["json"] } tokio = { version = "0.2", features = ["full"] }
ブロッキングで接続する場合は以下の内容にする
[dependences] reqwest = { version = "0.10", features = ["blocking", "json"] }
GET
基本的な書き方(デフォルト非同期)
#[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let resp = reqwest::get("https://rust-lang.org") .await? .text() .await?; println!("{:#?}", resp); Ok(()) }
ブロッキングでの書き方
fn main() -> Result<(), Box<dyn std::error::Error>> { let resp = reqwest::blocking::get("https://rust-lang.org").text()?; println!("{:#?}", resp); Ok(()) }
POST
まずはClientを作成してからPOST
#[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let data = "example data"; let client = reqwest::Client::new(); let resp = client.post("http://example.com/") .body(&data) .send()? .await?; let result = resp.text().await?; println!("{:#?}", result); Ok(()) }
fn main() -> Result<(), Box<dyn std::error::Error>> { let data = "example data"; let client = reqwest::blocking::Client::new(); let resp = client.post("http://example.com/").body(&data).send()?; let result = resp.text()?; println!("{:#?}", result); Ok(()) }
とりあえずここまで