W3cubDocs

/Nim

Module httpcore

Contains functionality shared between the httpclient and asynchttpserver modules.

Imports

tables, strutils, parseutils

Types

HttpHeaders = ref object
  table*: TableRef[string, seq[string]]
HttpHeaderValues = distinct seq[string]
HttpCode = distinct range[0 .. 599]
HttpVersion = enum
  HttpVer11, HttpVer10
HttpMethod = enum
  HttpHead, ## Asks for the response identical to the one that would
           ## correspond to a GET request, but without the response
           ## body.
  HttpGet,                    ## Retrieves the specified resource.
  HttpPost,                   ## Submits data to be processed to the identified
           ## resource. The data is included in the body of the
           ## request.
  HttpPut,                    ## Uploads a representation of the specified resource.
  HttpDelete,                 ## Deletes the specified resource.
  HttpTrace,                  ## Echoes back the received request, so that a client
            ## can see what intermediate servers are adding or
            ## changing in the request.
  HttpOptions,                ## Returns the HTTP methods that the server supports
              ## for specified address.
  HttpConnect,                ## Converts the request connection to a transparent
              ## TCP/IP tunnel, usually used for proxies.
  HttpPatch                   ## Applies partial modifications to a resource.
the requested HttpMethod

Consts

Http100 = 100
Http101 = 101
Http200 = 200
Http201 = 201
Http202 = 202
Http203 = 203
Http204 = 204
Http205 = 205
Http206 = 206
Http300 = 300
Http301 = 301
Http302 = 302
Http303 = 303
Http304 = 304
Http305 = 305
Http307 = 307
Http400 = 400
Http401 = 401
Http403 = 403
Http404 = 404
Http405 = 405
Http406 = 406
Http407 = 407
Http408 = 408
Http409 = 409
Http410 = 410
Http411 = 411
Http412 = 412
Http413 = 413
Http414 = 414
Http415 = 415
Http416 = 416
Http417 = 417
Http418 = 418
Http421 = 421
Http422 = 422
Http426 = 426
Http428 = 428
Http429 = 429
Http431 = 431
Http451 = 451
Http500 = 500
Http501 = 501
Http502 = 502
Http503 = 503
Http504 = 504
Http505 = 505
headerLimit = 10000

Procs

proc newHttpHeaders(): HttpHeaders {.raises: [], tags: [].}
proc newHttpHeaders(keyValuePairs: openArray[tuple[key: string, val: string]]): HttpHeaders {.
    raises: [], tags: [].}
proc clear(headers: HttpHeaders) {.raises: [], tags: [].}
proc `[]`(headers: HttpHeaders; key: string): HttpHeaderValues {.raises: [KeyError],
    tags: [].}

Returns the values associated with the given key. If the returned values are passed to a procedure expecting a string, the first value is automatically picked. If there are no values associated with the key, an exception is raised.

To access multiple values of a key, use the overloaded [] below or to get all of them access the table field directly.

proc `[]`(headers: HttpHeaders; key: string; i: int): string {.raises: [KeyError],
    tags: [].}
Returns the i'th value associated with the given key. If there are no values associated with the key or the i'th value doesn't exist, an exception is raised.
proc `[]=`(headers: HttpHeaders; key, value: string) {.raises: [], tags: [].}
Sets the header entries associated with key to the specified value. Replaces any existing values.
proc `[]=`(headers: HttpHeaders; key: string; value: seq[string]) {.raises: [], tags: [].}
Sets the header entries associated with key to the specified list of values. Replaces any existing values.
proc add(headers: HttpHeaders; key, value: string) {.raises: [KeyError], tags: [].}
Adds the specified value to the specified key. Appends to any existing values associated with the key.
proc del(headers: HttpHeaders; key: string) {.raises: [], tags: [].}
Delete the header entries associated with key
proc contains(values: HttpHeaderValues; value: string): bool {.raises: [], tags: [].}
Determines if value is one of the values inside values. Comparison is performed without case sensitivity.
proc hasKey(headers: HttpHeaders; key: string): bool {.raises: [], tags: [].}
proc getOrDefault(headers: HttpHeaders; key: string;
                 default = @ [""].HttpHeaderValues): HttpHeaderValues {.
    raises: [KeyError], tags: [].}
Returns the values associated with the given key. If there are no values associated with the key, then default is returned.
proc len(headers: HttpHeaders): int {.raises: [], tags: [].}
proc parseHeader(line: string): tuple[key: string, value: seq[string]] {.raises: [],
    tags: [].}

Parses a single raw header HTTP line into key value pairs.

Used by asynchttpserver and httpclient internally and should not be used by you.

proc `==`(protocol: tuple[orig: string, major, minor: int]; ver: HttpVersion): bool {.
    raises: [], tags: [].}
proc contains(methods: set[HttpMethod]; x: string): bool {.raises: [ValueError],
    tags: [].}
proc `$`(code: HttpCode): string {.raises: [], tags: [].}

Converts the specified HttpCode into a HTTP status.

For example:

doAssert($Http404 == "404 Not Found")
proc `==`(a, b: HttpCode): bool {.borrow.}
proc `==`(rawCode: string; code: HttpCode): bool {.raises: [], tags: [].}
proc is2xx(code: HttpCode): bool {.raises: [], tags: [].}
Determines whether code is a 2xx HTTP status code.
proc is3xx(code: HttpCode): bool {.raises: [], tags: [].}
Determines whether code is a 3xx HTTP status code.
proc is4xx(code: HttpCode): bool {.raises: [], tags: [].}
Determines whether code is a 4xx HTTP status code.
proc is5xx(code: HttpCode): bool {.raises: [], tags: [].}
Determines whether code is a 5xx HTTP status code.
proc `$`(httpMethod: HttpMethod): string {.raises: [], tags: [].}

Iterators

iterator pairs(headers: HttpHeaders): tuple[key, value: string] {.raises: [], tags: [].}
Yields each key, value pair.

Converters

converter toString(values: HttpHeaderValues): string {.raises: [], tags: [].}

© 2006–2017 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/httpcore.html