[解決済み] RustからHTTPリクエストを行うには?
質問
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)]
). 変換のための適切な関数。
-
extra::url::query_from_str
(申し訳ありませんが、現在非公開のため、これだけでは使用できません。これから公開するためのPRをします。その間、このリンクは実際には機能しないはずで、利用できるのは https://github.com/mozilla/rust/issues/7476 .)
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み] node.jsでHTTP POSTリクエストはどのように行われるのですか?
-
[解決済み] URLクエリパラメータを含むHTTP POST -- 良いアイデアかどうか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】AngularでHTTPリクエストにURL引数(クエリ文字列)を渡すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースを "アンキャッシュ" する
-
[解決済み] Google ChromeでSPDYを無効にする方法
-
[解決済み] OPTIONSリクエストを送信する理由と、それを無効にする方法を教えてください。
-
[解決済み] ブラウザのCookieドメインはどのように機能するのですか?
-
[解決済み】ファイルから取得した投稿データでcURLにリクエストを送信する。
-
[解決済み】BASIC認証でWebサイトからユーザーをログアウトさせる方法は?
-
[解決済み】http:// のリンクを全て // に変更することは可能ですか?
-
[解決済み] PragmaヘッダーとCache-Controlヘッダーの違い?
-
[解決済み] なぜCache-Control属性はリクエストヘッダ(クライアントからサーバーへ)に送信されるのですか?
-
[解決済み] ログインページにリダイレクトする際の正しいHTTPステータスコードは何ですか?