同期・非同期の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(())
}

とりあえずここまで