Safe Haskell | None |
---|
- type Method = ByteString
- methodGet :: Method
- methodPost :: Method
- methodHead :: Method
- methodPut :: Method
- methodDelete :: Method
- methodTrace :: Method
- methodConnect :: Method
- methodOptions :: Method
- methodPatch :: Method
- data StdMethod
- parseMethod :: Method -> Either ByteString StdMethod
- renderMethod :: Either ByteString StdMethod -> Method
- renderStdMethod :: StdMethod -> Method
- data HttpVersion = HttpVersion {}
- http09 :: HttpVersion
- http10 :: HttpVersion
- http11 :: HttpVersion
- data Status = Status {}
- mkStatus :: Int -> ByteString -> Status
- status100 :: Status
- continue100 :: Status
- status101 :: Status
- switchingProtocols101 :: Status
- status200 :: Status
- ok200 :: Status
- status201 :: Status
- created201 :: Status
- status202 :: Status
- accepted202 :: Status
- status203 :: Status
- nonAuthoritative203 :: Status
- status204 :: Status
- noContent204 :: Status
- status205 :: Status
- resetContent205 :: Status
- status206 :: Status
- partialContent206 :: Status
- status300 :: Status
- multipleChoices300 :: Status
- status301 :: Status
- movedPermanently301 :: Status
- status302 :: Status
- found302 :: Status
- status303 :: Status
- seeOther303 :: Status
- status304 :: Status
- notModified304 :: Status
- status305 :: Status
- useProxy305 :: Status
- status307 :: Status
- temporaryRedirect307 :: Status
- status400 :: Status
- badRequest400 :: Status
- status401 :: Status
- unauthorized401 :: Status
- status402 :: Status
- paymentRequired402 :: Status
- status403 :: Status
- forbidden403 :: Status
- status404 :: Status
- notFound404 :: Status
- status405 :: Status
- methodNotAllowed405 :: Status
- status406 :: Status
- notAcceptable406 :: Status
- status407 :: Status
- proxyAuthenticationRequired407 :: Status
- status408 :: Status
- requestTimeout408 :: Status
- status409 :: Status
- conflict409 :: Status
- status410 :: Status
- gone410 :: Status
- status411 :: Status
- lengthRequired411 :: Status
- status412 :: Status
- preconditionFailed412 :: Status
- status413 :: Status
- requestEntityTooLarge413 :: Status
- status414 :: Status
- requestURITooLong414 :: Status
- status415 :: Status
- unsupportedMediaType415 :: Status
- status416 :: Status
- requestedRangeNotSatisfiable416 :: Status
- status417 :: Status
- expectationFailed417 :: Status
- status418 :: Status
- imATeaPot418 :: Status
- status500 :: Status
- internalServerError500 :: Status
- status501 :: Status
- notImplemented501 :: Status
- status502 :: Status
- badGateway502 :: Status
- status503 :: Status
- serviceUnavailable503 :: Status
- status504 :: Status
- gatewayTimeout504 :: Status
- status505 :: Status
- httpVersionNotSupported505 :: Status
- statusIsInformational :: Status -> Bool
- statusIsSuccessful :: Status -> Bool
- statusIsRedirection :: Status -> Bool
- statusIsClientError :: Status -> Bool
- statusIsServerError :: Status -> Bool
- type Header = (HeaderName, ByteString)
- type HeaderName = CI ByteString
- type RequestHeaders = [Header]
- type ResponseHeaders = [Header]
- hAccept :: HeaderName
- hAcceptLanguage :: HeaderName
- hAuthorization :: HeaderName
- hCacheControl :: HeaderName
- hCookie :: HeaderName
- hConnection :: HeaderName
- hContentEncoding :: HeaderName
- hContentLength :: HeaderName
- hContentMD5 :: HeaderName
- hContentType :: HeaderName
- hDate :: HeaderName
- hIfModifiedSince :: HeaderName
- hIfRange :: HeaderName
- hLastModified :: HeaderName
- hLocation :: HeaderName
- hRange :: HeaderName
- hReferer :: HeaderName
- hServer :: HeaderName
- hUserAgent :: HeaderName
- data ByteRange
- renderByteRangeBuilder :: ByteRange -> Builder
- renderByteRange :: ByteRange -> ByteString
- type ByteRanges = [ByteRange]
- renderByteRangesBuilder :: ByteRanges -> Builder
- renderByteRanges :: ByteRanges -> ByteString
- type QueryItem = (ByteString, Maybe ByteString)
- type Query = [QueryItem]
- type SimpleQueryItem = (ByteString, ByteString)
- type SimpleQuery = [SimpleQueryItem]
- simpleQueryToQuery :: SimpleQuery -> Query
- renderQuery :: Bool -> Query -> ByteString
- renderQueryBuilder :: Bool -> Query -> Builder
- renderSimpleQuery :: Bool -> SimpleQuery -> ByteString
- parseQuery :: ByteString -> Query
- parseSimpleQuery :: ByteString -> SimpleQuery
- type QueryText = [(Text, Maybe Text)]
- queryTextToQuery :: QueryText -> Query
- queryToQueryText :: Query -> QueryText
- renderQueryText :: Bool -> QueryText -> Builder
- parseQueryText :: ByteString -> QueryText
- class QueryLike a where
- encodePathSegments :: [Text] -> Builder
- decodePathSegments :: ByteString -> [Text]
- encodePathSegmentsRelative :: [Text] -> Builder
- extractPath :: ByteString -> ByteString
- encodePath :: [Text] -> Query -> Builder
- decodePath :: ByteString -> ([Text], Query)
- urlEncodeBuilder :: Bool -> ByteString -> Builder
- urlEncode :: Bool -> ByteString -> ByteString
- urlDecode :: Bool -> ByteString -> ByteString
Methods
type Method = ByteStringSource
HTTP method (flat string type).
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP standard method (as defined by RFC 2616, and PATCH which is defined by RFC 5789).
parseMethod :: Method -> Either ByteString StdMethodSource
Convert a method ByteString
to a StdMethod
if possible.
renderMethod :: Either ByteString StdMethod -> MethodSource
Convert an algebraic method to a ByteString
.
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.
Please use mkStatus
to create status codes from code and message, or the Enum
instance or the
status code constants (like ok200
). There might be additional record members in the future.
Note that the Show instance is only for debugging.
mkStatus :: Int -> ByteString -> StatusSource
Create a Status from status code and message.
Continue 100
switchingProtocols101 :: StatusSource
Switching Protocols 101
Created 201
Accepted 202
nonAuthoritative203 :: StatusSource
Non-Authoritative Information 203
No Content 204
resetContent205 :: StatusSource
Reset Content 205
partialContent206 :: StatusSource
Partial Content 206
multipleChoices300 :: StatusSource
Multiple Choices 300
movedPermanently301 :: StatusSource
Moved Permanently 301
See Other 303
notModified304 :: StatusSource
Not Modified 304
Use Proxy 305
temporaryRedirect307 :: StatusSource
Temporary Redirect 307
Bad Request 400
unauthorized401 :: StatusSource
Unauthorized 401
paymentRequired402 :: StatusSource
Payment Required 402
Forbidden 403
Not Found 404
methodNotAllowed405 :: StatusSource
Method Not Allowed 405
notAcceptable406 :: StatusSource
Not Acceptable 406
proxyAuthenticationRequired407 :: StatusSource
Proxy Authentication Required 407
requestTimeout408 :: StatusSource
Request Timeout 408
Conflict 409
lengthRequired411 :: StatusSource
Length Required 411
preconditionFailed412 :: StatusSource
Precondition Failed 412
requestEntityTooLarge413 :: StatusSource
Request Entity Too Large 413
requestURITooLong414 :: StatusSource
Request-URI Too Long 414
unsupportedMediaType415 :: StatusSource
Unsupported Media Type 415
requestedRangeNotSatisfiable416 :: StatusSource
Requested Range Not Satisfiable 416
expectationFailed417 :: StatusSource
Expectation Failed 417
I'm a teapot 418
internalServerError500 :: StatusSource
Internal Server Error 500
notImplemented501 :: StatusSource
Not Implemented 501
Bad Gateway 502
serviceUnavailable503 :: StatusSource
Service Unavailable 503
gatewayTimeout504 :: StatusSource
Gateway Timeout 504
httpVersionNotSupported505 :: StatusSource
HTTP Version Not Supported 505
statusIsInformational :: Status -> BoolSource
Informational class
statusIsSuccessful :: Status -> BoolSource
Successful class
statusIsRedirection :: Status -> BoolSource
Redirection class
statusIsClientError :: Status -> BoolSource
Client Error class
statusIsServerError :: Status -> BoolSource
Server Error class
Headers
Types
type Header = (HeaderName, ByteString)Source
Header
type HeaderName = CI ByteStringSource
Header name
type RequestHeaders = [Header]Source
Request Headers
type ResponseHeaders = [Header]Source
Response Headers
Common headers
HTTP Header names
hAcceptLanguage :: HeaderNameSource
HTTP Header names
hAuthorization :: HeaderNameSource
HTTP Header names
hCacheControl :: HeaderNameSource
HTTP Header names
HTTP Header names
hConnection :: HeaderNameSource
HTTP Header names
hContentEncoding :: HeaderNameSource
HTTP Header names
hContentLength :: HeaderNameSource
HTTP Header names
hContentMD5 :: HeaderNameSource
HTTP Header names
hContentType :: HeaderNameSource
HTTP Header names
HTTP Header names
hIfModifiedSince :: HeaderNameSource
HTTP Header names
HTTP Header names
hLastModified :: HeaderNameSource
HTTP Header names
HTTP Header names
HTTP Header names
HTTP Header names
HTTP Header names
hUserAgent :: HeaderNameSource
HTTP Header names
Byte ranges
RFC 2616 Byte range (individual).
Negative indices are not allowed!
type ByteRanges = [ByteRange]Source
RFC 2616 Byte ranges (set).
URI
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
.
Convert Query
to a Builder
.
:: Bool | prepend question mark? |
-> SimpleQuery | |
-> ByteString |
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)
type QueryText = [(Text, Maybe Text)]Source
Like Query, but with Text
instead of ByteString
(UTF8-encoded).
parseQueryText :: ByteString -> QueryTextSource
Parse QueryText
from a ByteString
. See parseQuery
for details.
Generalized query types
Types which can, and commonly are, converted to Query
are in this class.
You can use lists of simple key value pairs, with ByteString
(strict, or lazy:
ByteString
), Text
, or String
as the key/value types. You can also have the value
type lifted into a Maybe to support keys without values; and finally it is possible to put
each pair into a Maybe for key-value pairs that aren't always present.
(QueryKeyLike k, QueryValueLike v) => QueryLike [(k, v)] | |
(QueryKeyLike k, QueryValueLike v) => QueryLike [Maybe (k, v)] |
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 :@=+$,
- Prepends each segment with a slash.
For example:
encodePathSegments [\"foo\", \"bar\", \"baz\"]
"/foo/bar/baz"
encodePathSegments [\"foo bar\", \"baz\/bin\"]
"/foo%20bar/baz%2Fbin"
encodePathSegments [\"שלום\"]
"/%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
Parse a list of path segments from a valid URL fragment.
encodePathSegmentsRelative :: [Text] -> BuilderSource
Like encodePathSegments, but without the initial slash.
Path (segments + query string)
extractPath :: ByteString -> ByteStringSource
Extract whole path (path segments + query) from a RFC 2616 Request-URI.
>>>
extractPath "/path"
"/path"
>>>
extractPath "http://example.com:8080/path"
"/path"
>>>
extractPath "http://example.com"
"/"
>>>
extractPath ""
"/"
encodePath :: [Text] -> Query -> BuilderSource
Encode a whole path (path segments + query).
decodePath :: ByteString -> ([Text], Query)Source
Decode a whole path (path segments + query).
URL encoding / decoding
:: Bool | Whether input is in query string. True: Query string, False: Path element |
-> ByteString | |
-> Builder |
Percent-encoding for URLs (using Builder
).
urlEncode :: Bool -> ByteString -> ByteStringSource
Percent-encoding for URLs.