Search documentation of inets

# httpd_util (inets v9.7.1)

Copy Markdown View Source

Miscellaneous utility functions to be used when implementing Erlang web server API modules.

This module provides the Erlang web server API module programmer with miscellaneous utility functions.

#### Note

Note the module is only recommended for using with httpd - for other cases it should be considered as deprecated.

### See also

`httpd`

## Summary

### Functions

convert_request_date(DateString)

`convert_request_date/1` converts `DateString` to the Erlang date format. `DateString` must be in one of the three date formats defined in RFC 2616.

create_etag(FileInfo)

`create_etag/1` calculates the Etag for a file from its size and time for last modification. `FileInfo` is a record defined in `kernel/include/file.hrl`.

day(NthDayOfWeek)

`day/1` converts the day of the week (`NthDayOfWeek`) from an integer (1-7) to an abbreviated string, that is

lookup(EtsTable, Key)

Equivalent to `lookup/3`.

lookup(EtsTable, Key, Undefined)

`lookup` extracts `{Key, Value}` tuples from `ETSTable` and returns the `Value` associated with `Key`. If `ETSTable` is of type `bag`, only the first `Value` associated with `Key` is returned. `lookup/2` returns `undefined` and `lookup/3` returns `Undefined` if no `Value` is found.

lookup_mime(ConfigDB, Suffix)

Equivalent to `lookup_mime/3`.

lookup_mime(ConfigDB, Suffix, Undefined)

`lookup_mime` returns the MIME type associated with a specific file suffix as specified in the file `mime.types` (located in the config directory).

lookup_mime_default(ConfigDB, Suffix)

Equivalent to `lookup_mime_default/3`.

lookup_mime_default(ConfigDB, Suffix, Undefined)

`lookup_mime_default` returns the MIME type associated with a specific file suffix as specified in the `mime.types` file (located in the config directory). If no appropriate association is found, the value of `DefaultType` is returned.

message(StatusCode, PhraseArgs, ConfigDB)

`message/3` returns an informative HTTP 1.1 status string in HTML. Each `StatusCode` requires a specific `PhraseArgs`

month(NthMonth)

`month/1` converts the month `NthMonth` as an integer (1-12) to an abbreviated string, that is

multi_lookup(EtsTable, Key)

`multi_lookup` extracts all `{Key, Value}` tuples from an `ETSTable` and returns all `Values` associated with `Key` in a list.

reason_phrase(StatusCode)

`reason_phrase` returns `Description` of an HTTP 1.1 `StatusCode`, for example, 200 is "OK" and 201 is "Created". For more information, see RFC 2616.

rfc1123_date()

Equivalent to `rfc1123_date/1`.

rfc1123_date(LocalTime)

`rfc1123_date/0` returns the current date in RFC 1123 format. `rfc_date/1` converts the date in the Erlang format to the RFC 1123 date format.

split(String, RegExp, N)

`split/3` splits `String` in `N` chunks using `RegExp`. `split/3` is equivalent to `re:split/3` with the exception that `N` defines the maximum number of fields in `FieldList`.

split_path(URIString)

`split_path/1` splits `RequestLine` in a file reference (`Path`), and a `QueryString` or a `PathInfo` string as specified in RFC 2616. A `QueryString` is isolated from `Path` with a question mark (`?`) and `PathInfo` with a slash (/). In the case of a `QueryString`, everything before `?` is a `Path` and everything after `?` is a `QueryString`. In the case of a `PathInfo`, `RequestLine` is scanned from left-to-right on the hunt for longest possible `Path` being a file or a directory. Everything after the longest possible `Path`, isolated with a `/`, is regarded as `PathInfo`

split_script_path(URIString)

`split_script_path/1` is equivalent to `split_path/1` with one exception. If the longest possible path is not a regular, accessible, and executable file, then `not_a_script` is returned.

## Functions

# convert_request_date(DateString)

    -spec convert_request_date(DateString) -> ErlDate | bad_date
                                  when DateString :: string(), ErlDate :: calendar:datetime().

`convert_request_date/1` converts `DateString` to the Erlang date format. `DateString` must be in one of the three date formats defined in RFC 2616.

# create_etag(FileInfo)

    -spec create_etag(FileInfo) -> Etag when FileInfo :: file:file_info(), Etag :: string().

`create_etag/1` calculates the Etag for a file from its size and time for last modification. `FileInfo` is a record defined in `kernel/include/file.hrl`.

# day(NthDayOfWeek)

    -spec day(NthDayOfWeek) -> DayOfWeek when NthDayOfWeek :: 1..7, DayOfWeek :: string().

`day/1` converts the day of the week (`NthDayOfWeek`) from an integer (1-7) to an abbreviated string, that is:

1 = "Mon", 2 = "Tue", ..., 7 = "Sat".

# lookup(EtsTable, Key)

    -spec lookup(EtsTable, Key) -> Result
                    when EtsTable :: ets:table(), Key :: term(), Result :: term() | undefined.

Equivalent to `lookup/3`.

# lookup(EtsTable, Key, Undefined)

    -spec lookup(EtsTable, Key, Undefined) -> Result
                    when
                        EtsTable :: ets:table(),
                        Key :: term(),
                        Undefined :: term(),
                        Result :: term() | Undefined.

`lookup` extracts `{Key, Value}` tuples from `ETSTable` and returns the `Value` associated with `Key`. If `ETSTable` is of type `bag`, only the first `Value` associated with `Key` is returned. `lookup/2` returns `undefined` and `lookup/3` returns `Undefined` if no `Value` is found.

# lookup_mime(ConfigDB, Suffix)

    -spec lookup_mime(ConfigDB, Suffix) -> MimeType
                         when ConfigDB :: ets:tid(), Suffix :: string(), MimeType :: string() | undefined.

Equivalent to `lookup_mime/3`.

# lookup_mime(ConfigDB, Suffix, Undefined)

    -spec lookup_mime(ConfigDB, Suffix, Undefined) -> MimeType
                         when
                             ConfigDB :: ets:tid(),
                             Suffix :: string(),
                             Undefined :: term(),
                             MimeType :: string() | Undefined.

`lookup_mime` returns the MIME type associated with a specific file suffix as specified in the file `mime.types` (located in the config directory).

# lookup_mime_default(ConfigDB, Suffix)

    -spec lookup_mime_default(ConfigDB, Suffix) -> MimeType
                                 when
                                     ConfigDB :: ets:tid(),
                                     Suffix :: string(),
                                     MimeType :: string() | undefined.

Equivalent to `lookup_mime_default/3`.

# lookup_mime_default(ConfigDB, Suffix, Undefined)

    -spec lookup_mime_default(ConfigDB, Suffix, Undefined) -> MimeType
                                 when
                                     ConfigDB :: ets:tid(),
                                     Suffix :: string(),
                                     Undefined :: term(),
                                     MimeType :: string() | Undefined.

`lookup_mime_default` returns the MIME type associated with a specific file suffix as specified in the `mime.types` file (located in the config directory). If no appropriate association is found, the value of `DefaultType` is returned.

# message(StatusCode, PhraseArgs, ConfigDB)

    -spec message(StatusCode, PhraseArgs, ConfigDB) -> Message
                     when
                         StatusCode ::
                             301 | 304 | 400 | 401 | 403 | 404 | 408 | 412 | 413 | 414 | 500 | 501 | 503 |
                             504,
                         PhraseArgs :: term(),
                         ConfigDB :: ets:tid(),
                         Message :: string().

`message/3` returns an informative HTTP 1.1 status string in HTML. Each `StatusCode` requires a specific `PhraseArgs`:

- `301` - `string/0`: A URL pointing at the new document position.

- `400 | 401 | 500` - `none` (no `PhraseArgs`).

- `403 | 404` - `string/0`: A `Request-URI` as described in RFC 2616.

- `501` - `{Method, RequestURI, HTTPVersion}`: The HTTP `Method`, `Request-URI`, and `HTTP-Version` as defined in RFC 2616.

- `504` - `string/0`: A string describing why the service was unavailable.

# month(NthMonth)

    -spec month(NthMonth) -> Month when NthMonth :: 1..12, Month :: string().

`month/1` converts the month `NthMonth` as an integer (1-12) to an abbreviated string, that is:

1 = "Jan", 2 = "Feb", ..., 12 = "Dec".

# multi_lookup(EtsTable, Key)

    -spec multi_lookup(EtsTable, Key) -> Result
                          when EtsTable :: ets:tid(), Key :: term(), Result :: list() | [term()].

`multi_lookup` extracts all `{Key, Value}` tuples from an `ETSTable` and returns all `Values` associated with `Key` in a list.

# reason_phrase(StatusCode)

    -spec reason_phrase(StatusCode) -> Description
                           when
                               StatusCode ::
                                   100 | 101 | 102 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 226 |
                                   300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 400 | 401 | 402 |
                                   403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 |
                                   415 | 416 | 417 | 422 | 423 | 424 | 425 | 426 | 500 | 501 | 502 | 503 |
                                   504 | 505 | 507,
                               Description :: string().

`reason_phrase` returns `Description` of an HTTP 1.1 `StatusCode`, for example, 200 is "OK" and 201 is "Created". For more information, see RFC 2616.

# rfc1123_date()

    -spec rfc1123_date() -> RFC1123Date when RFC1123Date :: string().

Equivalent to `rfc1123_date/1`.

# rfc1123_date(LocalTime)

    -spec rfc1123_date(LocalTime) -> RFC1123Date
                          when
                              LocalTime :: calendar:datetime() | undefined,
                              RFC1123Date :: string() | undefined.

`rfc1123_date/0` returns the current date in RFC 1123 format. `rfc_date/1` converts the date in the Erlang format to the RFC 1123 date format.

# split(String, RegExp, N)

    -spec split(String, RegExp, N) -> SplitRes
                   when
                       String :: string(),
                       RegExp :: string(),
                       N :: non_neg_integer(),
                       SplitRes :: {ok, FieldList} | {error, term()},
                       FieldList :: [string()].

`split/3` splits `String` in `N` chunks using `RegExp`. `split/3` is equivalent to `re:split/3` with the exception that `N` defines the maximum number of fields in `FieldList`.

# split_path(URIString)

    -spec split_path(URIString) -> {Path, QueryStringOrPathInfo}
                        when URIString :: string(), Path :: string(), QueryStringOrPathInfo :: string().

`split_path/1` splits `RequestLine` in a file reference (`Path`), and a `QueryString` or a `PathInfo` string as specified in RFC 2616. A `QueryString` is isolated from `Path` with a question mark (`?`) and `PathInfo` with a slash (/). In the case of a `QueryString`, everything before `?` is a `Path` and everything after `?` is a `QueryString`. In the case of a `PathInfo`, `RequestLine` is scanned from left-to-right on the hunt for longest possible `Path` being a file or a directory. Everything after the longest possible `Path`, isolated with a `/`, is regarded as `PathInfo`

# split_script_path(URIString)

    -spec split_script_path(URIString) -> Split
                               when
                                   URIString :: string(),
                                   Split :: not_a_script | {Path, {PathInfo, QueryString}} | {Path, []},
                                   Path :: string(),
                                   QueryString :: string(),
                                   PathInfo :: string().

`split_script_path/1` is equivalent to `split_path/1` with one exception. If the longest possible path is not a regular, accessible, and executable file, then `not_a_script` is returned.