- type Ascii = ByteString
- type Method = Ascii
- methodGet, methodOptions, methodConnect, methodTrace, methodDelete, methodPut, methodHead, methodPost :: Method
- data StdMethod
- parseMethod :: Method -> Either Ascii StdMethod
- renderMethod :: Either Ascii StdMethod -> Method
- renderStdMethod :: StdMethod -> Method
- data HttpVersion = HttpVersion {}
- http09 :: HttpVersion
- http10 :: HttpVersion
- http11 :: HttpVersion
- data Status = Status {
- statusCode :: Int
- statusMessage :: Ascii
- status100, statusContinue :: Status
- status101, statusSwitchingProtocols :: Status
- status200, statusOK :: Status
- status201, statusCreated :: Status
- status202, statusAccepted :: Status
- status203, statusNonAuthoritative :: Status
- status204, statusNoContent :: Status
- status205, statusResetContent :: Status
- status206, statusPartialContent :: Status
- status300, statusMultipleChoices :: Status
- status301, statusMovedPermanently :: Status
- status302, statusFound :: Status
- status303, statusSeeOther :: Status
- status304, statusNotModified :: Status
- status305, statusUseProxy :: Status
- status307, statusTemporaryRedirect :: Status
- status400, statusBadRequest :: Status
- status401, statusUnauthorized :: Status
- status402, statusPaymentRequired :: Status
- status403, statusForbidden :: Status
- status404, statusNotFound :: Status
- status405, statusNotAllowed :: Status
- status406, statusNotAcceptable :: Status
- status407, statusProxyAuthenticationRequired :: Status
- status408, statusRequestTimeout :: Status
- status409, statusConflict :: Status
- status410, statusGone :: Status
- status411, statusLengthRequired :: Status
- status412, statusPreconditionFailed :: Status
- status413, statusRequestEntityTooLarge :: Status
- status414, statusRequestURITooLong :: Status
- status415, statusUnsupportedMediaType :: Status
- status416, statusRequestedRangeNotSatisfiable :: Status
- status417, statusExpectationFailed :: Status
- status418, statusImATeapot :: Status
- status500, statusServerError :: Status
- status501, statusNotImplemented :: Status
- status502, statusBadGateway :: Status
- status503, statusServiceUnavailable :: Status
- status504, statusGatewayTimeout :: Status
- status505, statusHTTPVersionNotSupported :: Status
- type Header = (CI Ascii, Ascii)
- type RequestHeaders = [Header]
- type ResponseHeaders = [Header]
- headerAccept, headerDate, headerContentMD5, headerContentType, headerContentLength, headerConnection, headerCacheControl, headerAuthorization :: Ascii -> Header
- type QueryItem = (ByteString, Maybe ByteString)
- type Query = [QueryItem]
- type SimpleQueryItem = (ByteString, ByteString)
- type SimpleQuery = [SimpleQueryItem]
- simpleQueryToQuery :: SimpleQuery -> Query
- renderQuery :: Bool -> Query -> Ascii
- renderQueryBuilder :: Bool -> Query -> Builder
- renderSimpleQuery :: Bool -> SimpleQuery -> Ascii
- parseQuery :: ByteString -> Query
- parseSimpleQuery :: ByteString -> SimpleQuery
- type QueryText = [(Text, Maybe Text)]
- queryTextToQuery :: QueryText -> Query
- queryToQueryText :: Query -> QueryText
- renderQueryText :: Bool -> QueryText -> Builder
- parseQueryText :: ByteString -> QueryText
- encodePathSegments :: [Text] -> Builder
- decodePathSegments :: ByteString -> [Text]
- encodePath :: [Text] -> Query -> Builder
- decodePath :: ByteString -> ([Text], Query)
- urlEncodeBuilder :: Bool -> ByteString -> Builder
- urlEncode :: Bool -> ByteString -> Ascii
- urlDecode :: Bool -> ByteString -> ByteString
General
type Ascii = ByteStringSource
Methods
methodGet, methodOptions, methodConnect, methodTrace, methodDelete, methodPut, methodHead, methodPost :: MethodSource
HTTP Method constants.
HTTP standard method (as defined by RFC 2616).
parseMethod :: Method -> Either Ascii StdMethodSource
Convert a method ByteString
to a StdMethod
if possible.
renderStdMethod :: StdMethod -> MethodSource
Convert a StdMethod
to a ByteString
.
Versions
data HttpVersion Source
HTTP Version.
Note that the Show instance is intended merely for debugging.
HTTP 0.9
HTTP 1.0
HTTP 1.1
Status
HTTP Status.
Only the statusCode
is used for comparisons.
Note that the Show instance is only for debugging.
Status | |
|
status100, statusContinue :: StatusSource
Continue
status101, statusSwitchingProtocols :: StatusSource
Switching Protocols
status201, statusCreated :: StatusSource
Created
status202, statusAccepted :: StatusSource
Accepted
status203, statusNonAuthoritative :: StatusSource
Non-Authoritative Information
status204, statusNoContent :: StatusSource
No Content
status205, statusResetContent :: StatusSource
Reset Content
status206, statusPartialContent :: StatusSource
PartialContent
status300, statusMultipleChoices :: StatusSource
Multiple Choices
status301, statusMovedPermanently :: StatusSource
Moved Permanently
status302, statusFound :: StatusSource
Found
status303, statusSeeOther :: StatusSource
See Other
status304, statusNotModified :: StatusSource
Not Modified
status305, statusUseProxy :: StatusSource
Use Proxy
status307, statusTemporaryRedirect :: StatusSource
Temporary Redirect
status400, statusBadRequest :: StatusSource
Bad Request
status401, statusUnauthorized :: StatusSource
Unauthorized
status402, statusPaymentRequired :: StatusSource
Payment Required
status403, statusForbidden :: StatusSource
Forbidden
status404, statusNotFound :: StatusSource
Not Found
status405, statusNotAllowed :: StatusSource
Method Not Allowed
status406, statusNotAcceptable :: StatusSource
Not Acceptable
status407, statusProxyAuthenticationRequired :: StatusSource
Proxy Authentication Required
status408, statusRequestTimeout :: StatusSource
Request Timeout
status409, statusConflict :: StatusSource
Conflict
status410, statusGone :: StatusSource
Gone
status411, statusLengthRequired :: StatusSource
Length Required
status412, statusPreconditionFailed :: StatusSource
Precondition Failed
status413, statusRequestEntityTooLarge :: StatusSource
Request Entity Too Large
status414, statusRequestURITooLong :: StatusSource
Request-URI Too Long
status415, statusUnsupportedMediaType :: StatusSource
Unsupported Media Type
status416, statusRequestedRangeNotSatisfiable :: StatusSource
Requested Range Not Satisfiable
status417, statusExpectationFailed :: StatusSource
Expectation Failed
status418, statusImATeapot :: StatusSource
I'm a teapot
status500, statusServerError :: StatusSource
Internal Server Error
status501, statusNotImplemented :: StatusSource
Not Implemented
status502, statusBadGateway :: StatusSource
Bad Gateway
status503, statusServiceUnavailable :: StatusSource
Service Unavailable
status504, statusGatewayTimeout :: StatusSource
Gateway Timeout
status505, statusHTTPVersionNotSupported :: StatusSource
HTTP Version Not Supported
Headers
type RequestHeaders = [Header]Source
Request Headers
type ResponseHeaders = [Header]Source
Response Headers
headerAccept, headerDate, headerContentMD5, headerContentType, headerContentLength, headerConnection, headerCacheControl, headerAuthorization :: Ascii -> HeaderSource
HTTP Headers
Query string
type QueryItem = (ByteString, Maybe ByteString)Source
Query item
type Query = [QueryItem]Source
Query.
General form: a=b&c=d, but if the value is Nothing, it becomes a&c=d.
type SimpleQueryItem = (ByteString, ByteString)Source
Simplified Query item type without support for parameter-less items.
type SimpleQuery = [SimpleQueryItem]Source
Simplified Query type without support for parameter-less items.
simpleQueryToQuery :: SimpleQuery -> QuerySource
Convert SimpleQuery
to Query
.
:: Bool | prepend question mark? |
-> SimpleQuery | |
-> Ascii |
Convert SimpleQuery
to ByteString
.
parseQuery :: ByteString -> QuerySource
Split out the query string into a list of keys and values. A few importants points:
parseSimpleQuery :: ByteString -> SimpleQuerySource
Parse SimpleQuery
from a ByteString
.
Text query string (UTF8 encoded)
Path segments
encodePathSegments :: [Text] -> BuilderSource
Encodes a list of path segments into a valid URL fragment.
This function takes the following three steps:
- UTF-8 encodes the characters.
- Performs percent encoding on all unreserved characters, as well as :@=+$,
- Intercalates with a slash.
For example:
encodePathInfo [\"foo\", \"bar\", \"baz\"]
"foo/bar/baz"
encodePathInfo [\"foo bar\", \"baz\/bin\"]
"foo%20bar/baz%2Fbin"
encodePathInfo [\"\"]
"%D7%A9%D7%9C%D7%95%D7%9D"
Huge thanks to Jeremy Shaw who created the original implementation of this function in web-routes and did such thorough research to determine all correct escaping procedures.
decodePathSegments :: ByteString -> [Text]Source
Path (segments + query string)
encodePath :: [Text] -> Query -> BuilderSource
decodePath :: ByteString -> ([Text], Query)Source
URL encoding / decoding
:: Bool | Whether input is in query string. True: Query string, False: Path element |
-> ByteString | |
-> Builder |
urlEncode :: Bool -> ByteString -> AsciiSource