1. ホーム
  2. http

[解決済み] RustからHTTPリクエストを行うには?

2023-04-24 19:39:58

質問

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

出力をパースする必要はなく、ただリクエストしてHTTPレスポンスコードを確認するだけなのですが。

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

どのように解決するのですか?

更新:この回答はかなり古い歴史を参照しています。現在のベストプラクティスについては、以下を参照してください。 Isaac Aggrey の回答 をご覧ください。


私はこれまで rust-http となっており デファクト Rust の HTTP ライブラリ (Servo はこれを使っています) になっていますが、完全とは言い難く、現在のところドキュメントも非常に貧弱です。以下は、リクエストを行い、ステータスコードで何かを行う例です。

extern mod http;
use http::client::RequestWriter;
use http::method::Get;
use http::status;
use std::os;

fn main() {
    let request = RequestWriter::new(Get, FromStr::from_str(os::args()[1]).unwrap());
    let response = match request.read_response() {
        Ok(response) => response,
        Err(_request) => unreachable!(), // Uncaught condition will have failed first
    };
    if response.status == status::Ok {
        println!("Oh goodie, I got me a 200 OK response!");
    } else {
        println!("That URL ain't returning 200 OK, it returned {} instead", response.status);
    }
}

このコードを唯一のコマンドライン引数としてURLを指定して実行すると、ステータスコードがチェックされます! (HTTPのみ。HTTPSはありません。)

と比較します。 src/examples/client/client.rs を使ってみてください。

rust-http は rust の master ブランチを追跡しています。 現時点では、リリースされたばかりの Rust 0.8 で動作しますが、すぐに壊れるような変更がありそうです。 実際、どのバージョンの rust-http も Rust 0.8 では動作しません。リリース直前に privacy rules で回避できない変更があり、rust-http が extra::url で依存しているものがアクセスできないままになっています。これはその後修正されましたが、rust-http が Rust 0.8 と互換性のないままになっています。


クエリ文字列のエンコーディングについては、現時点では extra::url::Query (の型定義は ~[(~str, ~str)] ). 変換のための適切な関数。