---
name: "httpd_util"
section: "3erl"
platform: "linux"
package: "erlang-manpages"
version: "1:25.2.3+dfsg-1+deb12u4"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/httpd_util"
---

# httpd\_util(3erl)

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

## NAME

httpd\_util - Miscellaneous utility functions to be used when implementing \
   Erlang web server API modules.

## DESCRIPTION

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.

## EXPORTS

**convert\_request\_date(DateString) -\> ErlDate\|bad\_date**\

Types:

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) -\> Etag**\

Types:

FileInfo = 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) -\> DayOfWeek**\

Types:

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".

**decode\_hex(HexValue) -\> DecValue**\

Types:

HexValue = DecValue = string()\

Converts the hexadecimal value *HexValue* into its decimal equivalent (*DecValue*).

**flatlength(NestedList) -\> Size**\

Types:

NestedList = list()\
 Size = integer()\

*flatlength/1* computes the size of the possibly nested list *NestedList*, which can contain binaries.

**hexlist\_to\_integer(HexString) -\> Number**\

Types:

Number = integer()\
 HexString = string()\

*hexlist\_to\_integer* converts the hexadecimal value of *HexString* to an integer.

**integer\_to\_hexlist(Number) -\> HexString**\

Types:

Number = integer()\
 HexString = string()\

*integer\_to\_hexlist/1* returns a string representing *Number* in a hexadecimal form.

**lookup(ETSTable,Key) -\> Result**\
 **lookup(ETSTable,Key,Undefined) -\> Result**\

Types:

ETSTable = ets\_table()\
 Key = term()\
 Result = term() \| undefined \| Undefined\
 Undefined = term()\

*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)**\
 **lookup\_mime(ConfigDB,Suffix,Undefined) -\> MimeType**\

Types:

ConfigDB = ets\_table()\
 Suffix = string()\
 MimeType = string() \| undefined \| Undefined\
 Undefined = term()\

*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)**\
 **lookup\_mime\_default(ConfigDB,Suffix,Undefined) -\> MimeType**\

Types:

ConfigDB = ets\_table()\
 Suffix = string()\
 MimeType = string() \| undefined \| Undefined\
 Undefined = term()\

*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**\

Types:

StatusCode = 301 \| 400 \| 403 \| 404 \| 500 \| 501 \| 504\
 PhraseArgs = term()\
 ConfigDB = ets\_table\
 Message = string()\

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

- ***301*:**

  *string()*: A URL pointing at the new document position.

- ***400 \| 401 \| 500*:**

  *none* (no *PhraseArgs*).

- ***403 \| 404*:**

  *string()*: 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()*: A string describing why the service was unavailable.

**month(NthMonth) -\> Month**\

Types:

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) -\> Result**\

Types:

ETSTable = ets\_table()\
 Key = term()\
 Result = \[term()\]\

*multi\_lookup* extracts all *{Key,Value}* tuples from an *ETSTable* and returns *all* *Values* associated with *Key* in a list.

**reason\_phrase(StatusCode) -\> Description**\

Types:

StatusCode = 100 \| 200 \| 201 \| 202 \| 204 \| 205 \| 206 \| 300 \| 301 \| 302 \| 303 \| 304 \| 308 \| 400 \| 401 \| 402 \| 403 \| 404 \| 405 \| 406 \| 410 \| 411 \| 412 \| 413 \| 414 \| 415 \| 416 \| 417 \| 500 \| 501 \| 502 \| 503 \| 504 \| 505\
 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() -\> RFC1123Date**\
 **rfc1123\_date(Date) -\> RFC1123Date**\

Types:

 Date = calendar:datetime()\
 RFC1123Date = string()\

*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) -\> SplitRes**\

Types:

String = RegExp = string()\
 SplitRes = {ok, FieldList} \| {error, errordesc()}\
 Fieldlist = \[string()\]\
 N = integer\

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

**split\_script\_path(RequestLine) -\> Split**\

Types:

RequestLine = string()\
 Split = not\_a\_script \| {Path, PathInfo, QueryString}\
 Path = QueryString = 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.

**split\_path(RequestLine) -\> {Path,QueryStringOrPathInfo}**\

Types:

RequestLine = Path = 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*. The resulting *Path* is decoded using *decode\_hex/1* before delivery.

**strip(String) -\> Stripped**\

Types:

String = Stripped = string()\

*strip/1* removes any leading or trailing linear white space from the string. Linear white space is to be read as horizontal tab or space.

**suffix(FileName) -\> Suffix**\

Types:

FileName = Suffix = string()\

*suffix/1* is equivalent to *filename:extension/1* with the exception that *Suffix* is returned without a leading dot (*.*).

## SEE ALSO

[httpd(3erl)](/httpd/3erl.md)
