Rust から HTTP リクエストを送信するにはどうすればいいですか? 質問する

Rust から HTTP リクエストを送信するにはどうすればいいですか? 質問する

Rust から HTTP リクエストを行うにはどうすればよいですか? コア ライブラリには何も見つからないようです。

出力を解析する必要はなく、リクエストを作成して HTTP 応答コードを確認するだけです。

誰かが私の URL のクエリ パラメータを URL エンコードする方法を教えてくれたら、ボーナス ポイントがもらえます!

ベストアンサー1

RustでHTTPリクエストを行う最も簡単な方法は、リクエストクレート:

use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    let resp = reqwest::blocking::get("https://httpbin.org/ip")?.text()?;
    println!("{:#?}", resp);
    Ok(())
}

Cargo.toml

[dependencies]
reqwest = { version = "0.11", features = ["blocking"] }

非同期

Reqwestは、非同期HTTPリクエスト東京:

use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let resp = reqwest::get("https://httpbin.org/ip")
        .await?
        .text()
        .await?;
    println!("{:#?}", resp);
    Ok(())
}

Cargo.toml

[dependencies]
reqwest = "0.11"
tokio = { version = "1", features = ["full"] }

ハイパー

Reqwestは使いやすいラッパーですハイパーこれは Rust 用の人気の HTTP ライブラリです。接続の管理をより細かく制御する必要がある場合は、これを直接使用できます。ハイパーベースの例を以下に示します。これは主にドキュメント内の例:

use hyper::{body::HttpBody as _, Client, Uri};
use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let client = Client::new();

    let res = client
        .get(Uri::from_static("http://httpbin.org/ip"))
        .await?;

    println!("status: {}", res.status());

    let buf = hyper::body::to_bytes(res).await?;

    println!("body: {:?}", buf);
}

Cargo.toml

[dependencies]
hyper = { version = "0.14", features = ["full"] }
tokio = { version = "1", features = ["full"] }

元の回答 (Rust 0.6)

あなたが探しているものは、標準ライブラリ。 今錆びたhttpChris Morgan の回答は、当面の間、現在の Rust の標準的な方法です。どこまで説明できるかわかりませんが (間違った方向に導いていないことを祈ります!)、次のようなものが必要になるでしょう。

// Rust 0.6 -- old code
extern mod std;

use std::net_ip;
use std::uv;

fn main() {
    let iotask = uv::global_loop::get();
    let result = net_ip::get_addr("www.duckduckgo.com", &iotask);

    io::println(fmt!("%?", result));
}

エンコーディングに関しては、src/libstd/net_url.rs のユニット テストにいくつかの例があります。

おすすめ記事