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 のユニット テストにいくつかの例があります。