Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Network.HTTP.Types
Synopsis
- 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
- http20 :: 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
- status308 :: Status
- permanentRedirect308 :: 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
- status422 :: Status
- unprocessableEntity422 :: Status
- status428 :: Status
- preconditionRequired428 :: Status
- status429 :: Status
- tooManyRequests429 :: Status
- status431 :: Status
- requestHeaderFieldsTooLarge431 :: 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
- status511 :: Status
- networkAuthenticationRequired511 :: 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
- parseByteRanges :: ByteString -> Maybe ByteRanges
- type Query = [QueryItem]
- type QueryItem = (ByteString, Maybe ByteString)
- renderQuery :: Bool -> Query -> ByteString
- renderQueryBuilder :: Bool -> Query -> Builder
- parseQuery :: ByteString -> Query
- parseQueryReplacePlus :: Bool -> ByteString -> Query
- type QueryText = [(Text, Maybe Text)]
- queryTextToQuery :: QueryText -> Query
- queryToQueryText :: Query -> QueryText
- renderQueryText :: Bool -> QueryText -> Builder
- parseQueryText :: ByteString -> QueryText
- type SimpleQuery = [SimpleQueryItem]
- type SimpleQueryItem = (ByteString, ByteString)
- simpleQueryToQuery :: SimpleQuery -> Query
- renderSimpleQuery :: Bool -> SimpleQuery -> ByteString
- parseSimpleQuery :: ByteString -> SimpleQuery
- type PartialEscapeQuery = [PartialEscapeQueryItem]
- type PartialEscapeQueryItem = (ByteString, [EscapeItem])
- data EscapeItem
- = QE ByteString
- | QN ByteString
- renderQueryPartialEscape :: Bool -> PartialEscapeQuery -> ByteString
- renderQueryBuilderPartialEscape :: Bool -> PartialEscapeQuery -> Builder
- class QueryLike a where
- extractPath :: ByteString -> ByteString
- encodePath :: [Text] -> Query -> Builder
- decodePath :: ByteString -> ([Text], Query)
- encodePathSegments :: [Text] -> Builder
- encodePathSegmentsRelative :: [Text] -> Builder
- decodePathSegments :: ByteString -> [Text]
- urlEncode :: Bool -> ByteString -> ByteString
- urlEncodeBuilder :: Bool -> ByteString -> Builder
- urlDecode :: Bool -> ByteString -> ByteString
Methods
For more information: Network.HTTP.Types.Method
type Method = ByteString #
HTTP method (flat ByteString
type).
Constants
methodPost :: Method #
HTTP POST Method
methodHead :: Method #
HTTP HEAD Method
methodDelete :: Method #
HTTP DELETE Method
methodTrace :: Method #
HTTP TRACE Method
methodConnect :: Method #
HTTP CONNECT Method
methodOptions :: Method #
HTTP OPTIONS Method
methodPatch :: Method #
HTTP PATCH Method
Since: 0.8.0
HTTP standard method (as defined by RFC 2616, and PATCH which is defined by RFC 5789).
Since: 0.2.0
Instances
Parsing and redering methods
parseMethod :: Method -> Either ByteString StdMethod #
Convert a method ByteString
to a StdMethod
if possible.
Since: 0.2.0
renderMethod :: Either ByteString StdMethod -> Method #
Convert an algebraic method to a ByteString
.
renderMethod (parseMethod bs) == bs
Since: 0.3.0
renderStdMethod :: StdMethod -> Method #
Convert a StdMethod
to a ByteString
.
Since: 0.2.0
Versions
For more information: Network.HTTP.Types.Version
data HttpVersion #
HTTP Version.
Note that the Show
instance is intended merely for debugging.
Constructors
HttpVersion | |
Instances
Data HttpVersion # | Since: 0.12.4 | ||||
Defined in Network.HTTP.Types.Version Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> HttpVersion -> c HttpVersion # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c HttpVersion # toConstr :: HttpVersion -> Constr # dataTypeOf :: HttpVersion -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c HttpVersion) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HttpVersion) # gmapT :: (forall b. Data b => b -> b) -> HttpVersion -> HttpVersion # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> HttpVersion -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> HttpVersion -> r # gmapQ :: (forall d. Data d => d -> u) -> HttpVersion -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> HttpVersion -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> HttpVersion -> m HttpVersion # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> HttpVersion -> m HttpVersion # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> HttpVersion -> m HttpVersion # | |||||
Generic HttpVersion # | |||||
Defined in Network.HTTP.Types.Version Associated Types
| |||||
Show HttpVersion # |
| ||||
Defined in Network.HTTP.Types.Version Methods showsPrec :: Int -> HttpVersion -> ShowS # show :: HttpVersion -> String # showList :: [HttpVersion] -> ShowS # | |||||
Eq HttpVersion # | |||||
Defined in Network.HTTP.Types.Version | |||||
Ord HttpVersion # | |||||
Defined in Network.HTTP.Types.Version Methods compare :: HttpVersion -> HttpVersion -> Ordering # (<) :: HttpVersion -> HttpVersion -> Bool # (<=) :: HttpVersion -> HttpVersion -> Bool # (>) :: HttpVersion -> HttpVersion -> Bool # (>=) :: HttpVersion -> HttpVersion -> Bool # max :: HttpVersion -> HttpVersion -> HttpVersion # min :: HttpVersion -> HttpVersion -> HttpVersion # | |||||
type Rep HttpVersion # | Since: 0.12.4 | ||||
Defined in Network.HTTP.Types.Version type Rep HttpVersion = D1 ('MetaData "HttpVersion" "Network.HTTP.Types.Version" "http-types-0.12.4-2SFJ3KLUooQ7yK2zJjjEEI" 'False) (C1 ('MetaCons "HttpVersion" 'PrefixI 'True) (S1 ('MetaSel ('Just "httpMajor") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Just "httpMinor") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int))) |
http09 :: HttpVersion #
HTTP 0.9
http10 :: HttpVersion #
HTTP 1.0
http11 :: HttpVersion #
HTTP 1.1
http20 :: HttpVersion #
HTTP 2.0
Since: 0.10
Status
For more information: Network.HTTP.Types.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.
Constructors
Status | |
Fields
|
Instances
Data Status # | Since: 0.12.4 | ||||
Defined in Network.HTTP.Types.Status Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Status -> c Status # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Status # toConstr :: Status -> Constr # dataTypeOf :: Status -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Status) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Status) # gmapT :: (forall b. Data b => b -> b) -> Status -> Status # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Status -> r # gmapQ :: (forall d. Data d => d -> u) -> Status -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Status -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Status -> m Status # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Status -> m Status # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Status -> m Status # | |||||
Bounded Status # | Since: 0.11 | ||||
Enum Status # | Be advised, that when using the "enumFrom*" family of methods or ranges in lists, it will generate all possible status codes. E.g. The statuses not included in this library will have an empty message. Since: 0.7.3 | ||||
Defined in Network.HTTP.Types.Status | |||||
Generic Status # | |||||
Defined in Network.HTTP.Types.Status Associated Types
| |||||
Show Status # | |||||
Eq Status # | A | ||||
Ord Status # |
| ||||
type Rep Status # | Since: 0.12.4 | ||||
Defined in Network.HTTP.Types.Status type Rep Status = D1 ('MetaData "Status" "Network.HTTP.Types.Status" "http-types-0.12.4-2SFJ3KLUooQ7yK2zJjjEEI" 'False) (C1 ('MetaCons "Status" 'PrefixI 'True) (S1 ('MetaSel ('Just "statusCode") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "statusMessage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString))) |
Constants
continue100 :: Status #
Continue 100
Since: 0.6.6
switchingProtocols101 :: Status #
Switching Protocols 101
Since: 0.6.6
created201 :: Status #
Created 201
accepted202 :: Status #
Accepted 202
Since: 0.6.6
nonAuthoritative203 :: Status #
Non-Authoritative Information 203
Since: 0.6.6
noContent204 :: Status #
No Content 204
Since: 0.6.6
Reset Content 205
Since: 0.6.6
Partial Content 206
Since: 0.5.1
multipleChoices300 :: Status #
Multiple Choices 300
movedPermanently301 :: Status #
Moved Permanently 301
seeOther303 :: Status #
See Other 303
Not Modified 304
Since: 0.6.1
useProxy305 :: Status #
Use Proxy 305
Since: 0.6.6
temporaryRedirect307 :: Status #
Temporary Redirect 307
Since: 0.6.6
permanentRedirect308 :: Status #
Permanent Redirect 308
Since: 0.9
badRequest400 :: Status #
Bad Request 400
Unauthorized 401
paymentRequired402 :: Status #
Payment Required 402
Since: 0.6.6
forbidden403 :: Status #
Forbidden 403
notFound404 :: Status #
Not Found 404
methodNotAllowed405 :: Status #
Method Not Allowed 405
Not Acceptable 406
Since: 0.6.6
proxyAuthenticationRequired407 :: Status #
Proxy Authentication Required 407
Since: 0.6.6
Request Timeout 408
Since: 0.6.6
conflict409 :: Status #
Conflict 409
Since: 0.6.6
Length Required 411
Since: 0.6.6
preconditionFailed412 :: Status #
Precondition Failed 412
Since: 0.6.1
requestEntityTooLarge413 :: Status #
Request Entity Too Large 413
Since: 0.6.6
requestURITooLong414 :: Status #
Request-URI Too Long 414
Since: 0.6.6
unsupportedMediaType415 :: Status #
Unsupported Media Type 415
Since: 0.6.6
requestedRangeNotSatisfiable416 :: Status #
Requested Range Not Satisfiable 416
Since: 0.6.1
expectationFailed417 :: Status #
Expectation Failed 417
Since: 0.6.6
imATeapot418 :: Status #
I'm a teapot 418
Since: 0.6.6
unprocessableEntity422 :: Status #
Unprocessable Entity 422 (RFC 4918)
Since: 0.9.1
preconditionRequired428 :: Status #
Precondition Required 428 (RFC 6585)
Since: 0.8.5
tooManyRequests429 :: Status #
Too Many Requests 429 (RFC 6585)
Since: 0.8.5
requestHeaderFieldsTooLarge431 :: Status #
Request Header Fields Too Large 431 (RFC 6585)
Since: 0.8.5
internalServerError500 :: Status #
Internal Server Error 500
Not Implemented 501
Since: 0.6.1
badGateway502 :: Status #
Bad Gateway 502
Since: 0.6.6
serviceUnavailable503 :: Status #
Service Unavailable 503
Since: 0.6.6
Gateway Timeout 504
Since: 0.6.6
httpVersionNotSupported505 :: Status #
HTTP Version Not Supported 505
Since: 0.6.6
networkAuthenticationRequired511 :: Status #
Network Authentication Required 511 (RFC 6585)
Since: 0.8.5
statusIsInformational :: Status -> Bool #
Informational class
Checks if the status is in the 1XX range.
Since: 0.8.0
statusIsSuccessful :: Status -> Bool #
Successful class
Checks if the status is in the 2XX range.
Since: 0.8.0
statusIsRedirection :: Status -> Bool #
Redirection class
Checks if the status is in the 3XX range.
Since: 0.8.0
statusIsClientError :: Status -> Bool #
Client Error class
Checks if the status is in the 4XX range.
Since: 0.8.0
statusIsServerError :: Status -> Bool #
Server Error class
Checks if the status is in the 5XX range.
Since: 0.8.0
Headers
For more information: Network.HTTP.Types.Header
Types
type Header = (HeaderName, ByteString) #
A full HTTP header field with the name and value separated.
E.g. "Content-Length: 28"
parsed into a Header
would turn into ("Content-Length", "28")
type HeaderName = CI ByteString #
A case-insensitive name of a header field.
This is the part of the header field before the colon: HeaderName: some value
type RequestHeaders = [Header] #
A list of Header
s.
Same type as ResponseHeaders
, but useful to differentiate in type signatures.
type ResponseHeaders = [Header] #
A list of Header
s.
Same type as RequestHeaders
, but useful to differentiate in type signatures.
Common headers
hAccept :: HeaderName #
Since: 0.7.0
hAcceptLanguage :: HeaderName #
Since: 0.7.0
hAuthorization :: HeaderName #
Since: 0.7.0
Since: 0.7.0
hCookie :: HeaderName #
Since: 0.7.0
Since: 0.7.0
hContentEncoding :: HeaderName #
Since: 0.7.0
hContentLength :: HeaderName #
Since: 0.7.0
Since: 0.7.0
hDate :: HeaderName #
Since: 0.7.0
hIfModifiedSince :: HeaderName #
Since: 0.7.0
hIfRange :: HeaderName #
Since: 0.7.0
Since: 0.7.0
hLocation :: HeaderName #
Since: 0.7.1
hRange :: HeaderName #
Since: 0.7.0
hReferer :: HeaderName #
Since: 0.7.0
hServer :: HeaderName #
Since: 0.7.1
Since: 0.7.0
Byte ranges
An individual byte range.
Negative indices are not allowed!
Since: 0.6.11
Constructors
ByteRangeFrom !Integer | |
ByteRangeFromTo !Integer !Integer | |
ByteRangeSuffix !Integer |
Instances
Data ByteRange # | Since: 0.8.4 | ||||
Defined in Network.HTTP.Types.Header Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ByteRange -> c ByteRange # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ByteRange # toConstr :: ByteRange -> Constr # dataTypeOf :: ByteRange -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ByteRange) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ByteRange) # gmapT :: (forall b. Data b => b -> b) -> ByteRange -> ByteRange # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ByteRange -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ByteRange -> r # gmapQ :: (forall d. Data d => d -> u) -> ByteRange -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> ByteRange -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> ByteRange -> m ByteRange # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ByteRange -> m ByteRange # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ByteRange -> m ByteRange # | |||||
Generic ByteRange # | |||||
Defined in Network.HTTP.Types.Header Associated Types
| |||||
Show ByteRange # | Since: 0.8.4 | ||||
Eq ByteRange # | Since: 0.8.4 | ||||
Ord ByteRange # | Since: 0.8.4 | ||||
type Rep ByteRange # | Since: 0.12.4 | ||||
Defined in Network.HTTP.Types.Header type Rep ByteRange = D1 ('MetaData "ByteRange" "Network.HTTP.Types.Header" "http-types-0.12.4-2SFJ3KLUooQ7yK2zJjjEEI" 'False) (C1 ('MetaCons "ByteRangeFrom" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer)) :+: (C1 ('MetaCons "ByteRangeFromTo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer)) :+: C1 ('MetaCons "ByteRangeSuffix" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer)))) |
renderByteRangeBuilder :: ByteRange -> Builder #
Turns a byte range into a byte string Builder
.
Since: 0.6.11
renderByteRange :: ByteRange -> ByteString #
Renders a byte range into a ByteString
.
>>>
renderByteRange (ByteRangeFrom 2048)
"2048-"
Since: 0.6.11
type ByteRanges = [ByteRange] #
A list of byte ranges.
Since: 0.6.11
renderByteRangesBuilder :: ByteRanges -> Builder #
Turns a list of byte ranges into a byte string Builder
.
Since: 0.6.11
renderByteRanges :: ByteRanges -> ByteString #
Renders a list of byte ranges into a ByteString
.
>>>
renderByteRanges [ByteRangeFrom 2048, ByteRangeSuffix 20]
"bytes=2048-,-20"
Since: 0.6.11
parseByteRanges :: ByteString -> Maybe ByteRanges #
Parse the value of a Range header into a ByteRanges
.
>>>
parseByteRanges "error"
Nothing>>>
parseByteRanges "bytes=0-499"
Just [ByteRangeFromTo 0 499]>>>
parseByteRanges "bytes=500-999"
Just [ByteRangeFromTo 500 999]>>>
parseByteRanges "bytes=-500"
Just [ByteRangeSuffix 500]>>>
parseByteRanges "bytes=9500-"
Just [ByteRangeFrom 9500]>>>
parseByteRanges "bytes=0-0,-1"
Just [ByteRangeFromTo 0 0,ByteRangeSuffix 1]>>>
parseByteRanges "bytes=500-600,601-999"
Just [ByteRangeFromTo 500 600,ByteRangeFromTo 601 999]>>>
parseByteRanges "bytes=500-700,601-999"
Just [ByteRangeFromTo 500 700,ByteRangeFromTo 601 999]
Since: 0.9.1
URI
For more extensive information: Network.HTTP.Types.URI
Query strings
Query
type QueryItem = (ByteString, Maybe ByteString) #
An item from the query string, split up into two parts.
The second part should be Nothing
if there was no key-value
separator after the query item name.
Since: 0.2.0
renderQuery :: Bool -> Query -> ByteString #
Renders the given Query
into a ByteString
.
If you want a question mark (?
) added to the front of the result, use True
.
Since: 0.2.0
renderQueryBuilder :: Bool -> Query -> Builder #
parseQuery :: ByteString -> Query #
Split out the query string into a list of keys and values. A few importants points:
- The result returned is still bytestrings, since we perform no character decoding here. Most likely, you will want to use UTF-8 decoding, but this is left to the user of the library.
- Percent decoding errors are ignored. In particular,
"%Q"
will be output as"%Q"
. - It decodes
'+'
characters to' '
Since: 0.2.0
parseQueryReplacePlus :: Bool -> ByteString -> Query #
Same functionality as parseQuery
, but with the option to decode '+'
characters to ' '
or to preserve any '+'
encountered.
If you want to replace any '+'
with a space, use True
.
Since: 0.12.2
Text query string (UTF8 encoded)
type QueryText = [(Text, Maybe Text)] #
Like Query, but with Text
instead of ByteString
(UTF8-encoded).
Since: 0.5.2
queryToQueryText :: Query -> QueryText #
renderQueryText :: Bool -> QueryText -> Builder #
parseQueryText :: ByteString -> QueryText #
Parse a QueryText
from a ByteString
. See parseQuery
for details.
queryToQueryText
.parseQuery
Since: 0.5.2
SimpleQuery
type SimpleQuery = [SimpleQueryItem] #
A sequence of SimpleQueryItem
s.
type SimpleQueryItem = (ByteString, ByteString) #
Simplified query item type without support for parameter-less items.
Since: 0.2.0
simpleQueryToQuery :: SimpleQuery -> Query #
Convert SimpleQuery
to Query
.
Since: 0.5
renderSimpleQuery :: Bool -> SimpleQuery -> ByteString #
Render the given SimpleQuery
into a ByteString
.
If you want a question mark (?
) added to the front of the result, use True
.
Since: 0.2.0
parseSimpleQuery :: ByteString -> SimpleQuery #
Parse SimpleQuery
from a ByteString
.
This uses parseQuery
under the hood, and will transform
any Nothing
values into an empty ByteString
.
Since: 0.2.0
PartialEscapeQuery
type PartialEscapeQuery = [PartialEscapeQueryItem] #
Query with some characters that should not be escaped.
General form: a=b&c=d:e+f&g=h
Since: 0.12.1
type PartialEscapeQueryItem = (ByteString, [EscapeItem]) #
Partially escaped query item.
The key will always be encoded using 'urlEncode True'
,
but the value will be encoded depending on which EscapeItem
s are used.
Since: 0.12.1
data EscapeItem #
Section of a query item value that decides whether to use
regular URL encoding (using 'urlEncode True'
) with QE
,
or to not encode anything with QN
.
Since: 0.12.1
Constructors
QE ByteString | will be URL encoded |
QN ByteString | will NOT at all be URL encoded |
Instances
Show EscapeItem # | |
Defined in Network.HTTP.Types.URI Methods showsPrec :: Int -> EscapeItem -> ShowS # show :: EscapeItem -> String # showList :: [EscapeItem] -> ShowS # | |
Eq EscapeItem # | |
Defined in Network.HTTP.Types.URI | |
Ord EscapeItem # | |
Defined in Network.HTTP.Types.URI Methods compare :: EscapeItem -> EscapeItem -> Ordering # (<) :: EscapeItem -> EscapeItem -> Bool # (<=) :: EscapeItem -> EscapeItem -> Bool # (>) :: EscapeItem -> EscapeItem -> Bool # (>=) :: EscapeItem -> EscapeItem -> Bool # max :: EscapeItem -> EscapeItem -> EscapeItem # min :: EscapeItem -> EscapeItem -> EscapeItem # |
renderQueryPartialEscape :: Bool -> PartialEscapeQuery -> ByteString #
Convert PartialEscapeQuery
to ByteString
.
If you want a question mark (?
) added to the front of the result, use True
.
>>>
renderQueryPartialEscape True [("a", [QN "x:z + ", QE (encodeUtf8 "They said: \"שלום\"")])]
"?a=x:z + They%20said%3A%20%22%D7%A9%D7%9C%D7%95%D7%9D%22"
Since: 0.12.1
renderQueryBuilderPartialEscape :: Bool -> PartialEscapeQuery -> Builder #
Convert a PartialEscapeQuery
to a Builder
.
If you want a question mark (?
) added to the front of the result, use True
.
Since: 0.12.1
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.
Since: 0.7.0
Instances
(QueryKeyLike k, QueryValueLike v) => QueryLike [Maybe (k, v)] # | |
Defined in Network.HTTP.Types.QueryLike | |
(QueryKeyLike k, QueryValueLike v) => QueryLike [(k, v)] # | |
Defined in Network.HTTP.Types.QueryLike |
Path
Segments + Query String
extractPath :: ByteString -> ByteString #
Extract whole path (path segments + query) from a RFC 2616 Request-URI.
Though a more accurate description of this function's behaviour is that
it removes the domain/origin if the string starts with an HTTP protocol.
(i.e. http://
or https://
)
This function will not change anything when given any other ByteString
.
(except return a root path "/"
if given an empty string)
>>>
extractPath "/path"
"/path"
>>>
extractPath "http://example.com:8080/path"
"/path"
>>>
extractPath "http://example.com"
"/"
>>>
extractPath ""
"/"
>>>
extractPath "www.google.com/some/path"
"www.google.com/some/path"
Since: 0.8.5
encodePath :: [Text] -> Query -> Builder #
Encode a whole path (path segments + query).
Since: 0.5
decodePath :: ByteString -> ([Text], Query) #
Decode a whole path (path segments + query).
Since: 0.5
Path Segments
encodePathSegments :: [Text] -> Builder #
Encodes a list of path segments into a valid URL fragment.
This function takes the following three steps:
- UTF-8 encodes the characters.
- Prepends each segment with a slash.
Performs percent-encoding on all characters that are not:
- alphanumeric (i.e.
A-Z
anda-z
) - digits (i.e.
0-9
) - a dash
'-'
, an underscore'_'
, a dot'.'
, or a tilde'~'
- alphanumeric (i.e.
For example:
>>>
encodePathSegments ["foo", "bar1", "~baz"]
"/foo/bar1/~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.
Since: 0.5
encodePathSegmentsRelative :: [Text] -> Builder #
Like encodePathSegments
, but without the initial slash.
Since: 0.6.10
decodePathSegments :: ByteString -> [Text] #
Parse a list of path segments from a valid URL fragment.
Will also decode any percent-encoded characters.
Since: 0.5
URL encoding / decoding
urlEncode :: Bool -> ByteString -> ByteString #
Percent-encoding for URLs.
In short:
- if you're encoding (parts of) a path element, use
False
. - if you're encoding (parts of) a query string, use
True
.
In-depth explanation
This will substitute every byte with its percent-encoded equivalent unless:
- The byte is alphanumeric. (i.e.
A-Z
,a-z
, or0-9
) - The byte is either a dash
'-'
, an underscore'_'
, a dot'.'
, or a tilde'~'
If
False
is used, the following will also not be percent-encoded:- colon
':'
, at sign'@'
, ampersand'&'
, equals sign'='
, plus sign'+'
, dollar sign'$'
or a comma','
- colon
Since: 0.2.0
urlEncodeBuilder :: Bool -> ByteString -> Builder #
urlDecode :: Bool -> ByteString -> ByteString #