std.net
ネットワークモジュール。
use std.net本モジュールはオペレーティングシステムのネットワーク機能に依存しており、
wasm32ターゲットではエクスポートされません。
実装状態の警告(#56):本モジュールの4つの関数のうち、
url_encode/url_decodeのみが実際の実装です。http_get/http_postはプレースホルダ実装であり、ネットワークリクエストを一切発行しません。引数を文字列に連結して返すだけです。詳細は各項目を参照してください。
関数一覧
| 関数 | シグネチャ |
|---|---|
http_get | (url: &String) -> String |
http_post | (url: &String, body: &String) -> String |
url_encode | (s: &String) -> String |
url_decode | (s: &String) -> String |
関数
http_get
http_get: (url: &String) -> Stringプレースホルダ実装。HTTPクライアントには接続されていません(#56)。 現在の動作は、引数を
"GET: {url}"という文字列に連結して返すだけであり、いかなるネットワークリクエストも発行しません。レスポンスボディも返しません。これに依存して実際のHTTP呼び出しを行うと静かに失敗します。取得できるのはレスポンスの内容ではなく、説明用の文字列です。
url—— リクエストURL(読み取り専用借用)
戻り値:"GET: http://example.com" 形式の文字列。エラー:引数が不足している場合 E6007 をスローします。引数が String 以外の場合は型エラーをスローします。
use std.assert
use std.net
main: () -> Void = {
// 現在の実装はレスポンスボディではなく説明用文字列を返す
r = net.http_get("http://example.com")
assert(r == "GET: http://example.com")
}http_post
http_post: (url: &String, body: &String) -> Stringプレースホルダ実装。HTTPクライアントには接続されていません(#56)。 現在の動作は、
"POST {url}: {body}"を連結した文字列を返すだけであり、いかなるネットワークリクエストも発行しません。
url—— リクエストURL(読み取り専用借用)body—— リクエストボディ(読み取り専用借用)
戻り値:"POST http://example.com: hello" 形式の文字列。エラー:引数が不足している場合 E6007 をスローします。引数の型が一致しない場合は型エラーをスローします。
use std.assert
use std.net
main: () -> Void = {
r = net.http_post("http://example.com", "hello")
assert(r == "POST http://example.com: hello")
}url_encode
url_encode: (s: &String) -> Stringパーセントエンコーディング(percent-encoding)。
s—— エンコード対象の文字列(読み取り専用借用)
戻り値:エンコード後の文字列。空白は %20 にエンコードされます(+ ではありません)。予約文字はRFC 3986に従ってエスケープされます。非予約文字はそのまま保持されます。
エラー:引数が不足している場合 E6007 をスローします。引数が String 以外の場合は型エラーをスローします。
use std.assert
use std.net
main: () -> Void = {
assert(net.url_encode("a b") == "a%20b")
assert(net.url_encode("a&b=c?d") == "a%26b%3Dc%3Fd")
}url_decode
url_decode: (s: &String) -> Stringパーセントデコード。url_encode と逆関数の関係です。
s—— エンコード済みの文字列(読み取り専用借用)
戻り値:デコード後の文字列。不正なエスケープシーケンスはそのまま保持されます。
エラー:引数が不足している場合 E6007 をスローします。引数が String 以外の場合は型エラーをスローします。
use std.assert
use std.net
main: () -> Void = {
assert(net.url_decode("a%20b") == "a b")
// ラウンドトリップで一致
orig = "hello world & friends"
assert(net.url_decode(net.url_encode(orig)) == orig)
}関連項目
- エラーコードリファレンス ——
E6007汎用ランタイムエラー
