6.52. kink/http/REQ

6.52.1. req型

reqは、HTTPリクエストである。

6.52.1.1. Req.method

methodは、 'GET' や 'POST' のように、リクエストのメソッドをstr値として戻す。

6.52.1.2. Req.uri

uriは、リクエストのURIをstr値として戻す。

6.52.1.3. Req.headers

headersは、ヘッダ名から、対応するヘッダ値のベクタへのmapを戻す。

mapのキーはstr値である。大文字小文字は区別されない。

mapの値は、str値を含むvec値である。

:REQ.require_from('kink/http/')

:Req <- REQ.new('POST' 'https://example.kink-lang.org/form'){(:C)
  C.header('Content-Type' 'text/plain')
  C.header('Accept' 'application/octet-stream')
  C.header('Accept' '*/*')
}
stdout.print_line(Req.headers.repr)
# Output:
#   (flat_map "accept"=>["application/octet-stream" "*/*"] "content-type"=>["text/plain"])

6.52.1.4. Req.content

contentは、リクエストの本体をreq_content値として戻す。

6.52.1.5. Req.redirect_count

redirect_countは、Reqまでのリダイレクトの回数を戻す。

Reqがリダイレクト元なしで作られた場合、結果は0になる。

Reqがリダイレクト元を指定して作られた場合、結果はReq.redirect_source.redirect_count + 1になる。

6.52.1.6. Req.redirect_source

redirect_sourceは、リクエストのリダイレクト元のHTTPレスポンスのresp値を戻す。

事前条件

Req.redirect_countが0であってはならない。

6.52.2. REQ.new(Method Uri ...[$config={}])

newは新しいreqを戻す。Methodがリクエストメソッドに、UriがリソースのURIになる。

事前条件

Methodは[RFC 9110]の「token」のstr値でなければならない。

Methodは 'CONNECT' であってはならない。

Uriは、[RFC 9110 - 4.2.1, 4.2.2]に規定されたhttp/httpsのURIのstr値でなければならない。

$configは、request_new_configをコンフィグ値として取らなければならない。

6.52.3. request_new_config型

request_new_configは、REQ.newのコンフィグ値である。

6.52.3.1. C.header(Name Val)

headerは、HTTPのヘッダを指定する。このメソッドは、複数のヘッダエントリを指定するために複数回呼び出せる。

事前条件

Nameは、[RFC 9110]で定義された「token」のstr値でなければならない。

Valは、/|[\x21-\x7e\x80-\xff]([\t\x20-\x7e\x80-\xff]*[\x21-\x7e\x80-\xff])?/に合致するstrでなければならない。これは、[RFC 9110]に定義された「field-value」が、ISO-8859-1文字コードでデコードされたものと想定している。

6.52.3.2. C.content(Content)

contentは、HTTPリクエストの本体としてContentを指定する。

contentが呼ばれない場合、リクエストの本体は空になる。

事前条件

Contentはreq_content値でなければならない。

6.52.3.3. C.redirect_source(Resp)

redirect_sourceは、リクエストが、HTTPレスポンスRespからのリダイレクトの結果として行われることを指定する。

事前条件

Respはresp値でなければならない。

6.52.4. REQ.is?(Val)

is?は、Valがreqであるかどうかを戻す。