std/httpcore

Search:
Source   Edit  

Contains functionality shared between the httpclient and asynchttpserver modules.

Unstable API.

Types

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

Consts

headerLimit = 10000
Source   Edit  
Http100 = 100
Source   Edit  
Http101 = 101
Source   Edit  
Http200 = 200
Source   Edit  
Http201 = 201
Source   Edit  
Http202 = 202
Source   Edit  
Http203 = 203
Source   Edit  
Http204 = 204
Source   Edit  
Http205 = 205
Source   Edit  
Http206 = 206
Source   Edit  
Http208 = 208
https://tools.ietf.org/html/rfc5842.html WebDAV, Section 7.1 Source   Edit  
Http226 = 226
https://tools.ietf.org/html/rfc3229.html Delta encoding, Section 10.4.1 Source   Edit  
Http300 = 300
Source   Edit  
Http301 = 301
Source   Edit  
Http302 = 302
Source   Edit  
Http303 = 303
Source   Edit  
Http304 = 304
Source   Edit  
Http305 = 305
Source   Edit  
Http307 = 307
Source   Edit  
Http308 = 308
Source   Edit  
Http400 = 400
Source   Edit  
Http401 = 401
Source   Edit  
Http402 = 402
https://tools.ietf.org/html/rfc7231.html Payment required, Section 6.5.2 Source   Edit  
Http403 = 403
Source   Edit  
Http404 = 404
Source   Edit  
Http405 = 405
Source   Edit  
Http406 = 406
Source   Edit  
Http407 = 407
Source   Edit  
Http408 = 408
Source   Edit  
Http409 = 409
Source   Edit  
Http410 = 410
Source   Edit  
Http411 = 411
Source   Edit  
Http412 = 412
Source   Edit  
Http413 = 413
Source   Edit  
Http414 = 414
Source   Edit  
Http415 = 415
Source   Edit  
Http416 = 416
Source   Edit  
Http417 = 417
Source   Edit  
Http418 = 418
Source   Edit  
Http421 = 421
Source   Edit  
Http422 = 422
Source   Edit  
Http423 = 423
https://tools.ietf.org/html/rfc4918.html WebDAV, Section 11.3 Source   Edit  
Http424 = 424
https://tools.ietf.org/html/rfc4918.html WebDAV, Section 11.3 Source   Edit  
Http426 = 426
Source   Edit  
Http428 = 428
Source   Edit  
Http429 = 429
Source   Edit  
Http431 = 431
Source   Edit  
Http451 = 451
Source   Edit  
Http500 = 500
Source   Edit  
Http501 = 501
Source   Edit  
Http502 = 502
Source   Edit  
Http503 = 503
Source   Edit  
Http504 = 504
Source   Edit  
Http505 = 505
Source   Edit  
Http506 = 506
https://tools.ietf.org/html/rfc2295.html Content negotiation, Section 8.1 Source   Edit  
Http507 = 507
https://tools.ietf.org/html/rfc4918.html WebDAV, Section 11.5 Source   Edit  
Http508 = 508
https://tools.ietf.org/html/rfc5842.html WebDAV, Section 7.2 Source   Edit  
Http510 = 510
https://tools.ietf.org/html/rfc2774.html Extension framework, Section 7 Source   Edit  
Http511 = 511
https://tools.ietf.org/html/rfc6585.html Additional status code, Section 6 Source   Edit  
httpNewLine = "\r\n"
Source   Edit  

Procs

func `$`(code: HttpCode): string {....raises: [], tags: [], forbids: [].}
Converts the specified HttpCode into a HTTP status.

Example:

doAssert($Http404 == "404 Not Found")
Source   Edit  
func `$`(headers: HttpHeaders): string {.inline, ...raises: [], tags: [],
    forbids: [].}
Source   Edit  
func `==`(a, b: HttpCode): bool {.borrow, ...raises: [], tags: [], forbids: [].}
Source   Edit  
func `==`(protocol: tuple[orig: string, major, minor: int]; ver: HttpVersion): bool {.
    ...raises: [], tags: [], forbids: [].}
Source   Edit  
func `[]`(headers: HttpHeaders; key: string): HttpHeaderValues {.
    ...raises: [KeyError], tags: [], forbids: [].}

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.

Source   Edit  
func `[]`(headers: HttpHeaders; key: string; i: int): string {.
    ...raises: [KeyError], tags: [], forbids: [].}
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. Source   Edit  
proc `[]=`(headers: HttpHeaders; key, value: string) {....raises: [], tags: [],
    forbids: [].}
Sets the header entries associated with key to the specified value. Replaces any existing values. Source   Edit  
proc `[]=`(headers: HttpHeaders; key: string; value: seq[string]) {....raises: [],
    tags: [], forbids: [].}
Sets the header entries associated with key to the specified list of values. Replaces any existing values. If value is empty, deletes the header entries associated with key. Source   Edit  
proc add(headers: HttpHeaders; key, value: string) {....raises: [KeyError],
    tags: [], forbids: [].}
Adds the specified value to the specified key. Appends to any existing values associated with the key. Source   Edit  
proc clear(headers: HttpHeaders) {.inline, ...raises: [], tags: [], forbids: [].}
Source   Edit  
func contains(methods: set[HttpMethod]; x: string): bool {....raises: [ValueError],
    tags: [], forbids: [].}
Source   Edit  
func contains(values: HttpHeaderValues; value: string): bool {....raises: [],
    tags: [], forbids: [].}
Determines if value is one of the values inside values. Comparison is performed without case sensitivity. Source   Edit  
proc del(headers: HttpHeaders; key: string) {....raises: [], tags: [], forbids: [].}
Deletes the header entries associated with key Source   Edit  
func getOrDefault(headers: HttpHeaders; key: string;
                  default = @[""].HttpHeaderValues): HttpHeaderValues {.
    ...raises: [KeyError], tags: [], forbids: [].}
Returns the values associated with the given key. If there are no values associated with the key, then default is returned. Source   Edit  
func hasKey(headers: HttpHeaders; key: string): bool {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
func is1xx(code: HttpCode): bool {.inline, ...raises: [], tags: [], forbids: [].}
Determines whether code is a 1xx HTTP status code.

Example:

doAssert is1xx(HttpCode(103))
Source   Edit  
func is2xx(code: HttpCode): bool {.inline, ...raises: [], tags: [], forbids: [].}
Determines whether code is a 2xx HTTP status code. Source   Edit  
func is3xx(code: HttpCode): bool {.inline, ...raises: [], tags: [], forbids: [].}
Determines whether code is a 3xx HTTP status code. Source   Edit  
func is4xx(code: HttpCode): bool {.inline, ...raises: [], tags: [], forbids: [].}
Determines whether code is a 4xx HTTP status code. Source   Edit  
func is5xx(code: HttpCode): bool {.inline, ...raises: [], tags: [], forbids: [].}
Determines whether code is a 5xx HTTP status code. Source   Edit  
func len(headers: HttpHeaders): int {.inline, ...raises: [], tags: [], forbids: [].}
Source   Edit  
func newHttpHeaders(keyValuePairs: openArray[tuple[key: string, val: string]];
                    titleCase = false): HttpHeaders {....raises: [KeyError],
    tags: [], forbids: [].}
Returns a new HttpHeaders object from an array. if titleCase is set to true, headers are passed to the server in title case (e.g. "Content-Length") Source   Edit  
func newHttpHeaders(titleCase = false): HttpHeaders {....raises: [], tags: [],
    forbids: [].}
Returns a new HttpHeaders object. if titleCase is set to true, headers are passed to the server in title case (e.g. "Content-Length") Source   Edit  
func parseHeader(line: string): tuple[key: string, value: seq[string]] {.
    ...raises: [], tags: [], forbids: [].}

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

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

Source   Edit  
func toCaseInsensitive(headers: HttpHeaders; s: string): string {.inline,
    ...raises: [], tags: [], forbids: [].}
For internal usage only. Do not use. Source   Edit  

Iterators

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

Converters

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