Safe Haskell | None |
---|---|
Language | Haskell98 |
Network.HTTP.Types
Contents
- 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 = ByteString
HTTP method (flat string type).
methodPost :: Method
HTTP Method constants.
methodHead :: Method
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
HTTP Method constants.
data StdMethod
HTTP standard method (as defined by RFC 2616, and PATCH which is defined by RFC 5789).
parseMethod :: Method -> Either ByteString StdMethod
Convert a method ByteString
to a StdMethod
if possible.
renderMethod :: Either ByteString StdMethod -> Method
Convert an algebraic method to a ByteString
.
renderStdMethod :: StdMethod -> Method
Convert a StdMethod
to a ByteString
.
Versions
data HttpVersion
HTTP Version.
Note that the Show instance is intended merely for debugging.
Constructors
HttpVersion | |
Instances
HTTP 0.9
HTTP 1.0
HTTP 1.1
Status
data 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
|
mkStatus :: Int -> ByteString -> Status
Create a Status from status code and message.
Continue 100
switchingProtocols101 :: Status
Switching Protocols 101
created201 :: Status
Created 201
Accepted 202
Non-Authoritative Information 203
No Content 204
Reset Content 205
Partial Content 206
Multiple Choices 300
Moved Permanently 301
See Other 303
Not Modified 304
Use Proxy 305
temporaryRedirect307 :: Status
Temporary Redirect 307
Bad Request 400
Unauthorized 401
Payment Required 402
Forbidden 403
Not Found 404
Method Not Allowed 405
Not Acceptable 406
proxyAuthenticationRequired407 :: Status
Proxy Authentication Required 407
Request Timeout 408
Conflict 409
Length Required 411
preconditionFailed412 :: Status
Precondition Failed 412
requestEntityTooLarge413 :: Status
Request Entity Too Large 413
requestURITooLong414 :: Status
Request-URI Too Long 414
unsupportedMediaType415 :: Status
Unsupported Media Type 415
requestedRangeNotSatisfiable416 :: Status
Requested Range Not Satisfiable 416
expectationFailed417 :: Status
Expectation Failed 417
I'm a teapot 418
internalServerError500 :: Status
Internal Server Error 500
Not Implemented 501
Bad Gateway 502
serviceUnavailable503 :: Status
Service Unavailable 503
Gateway Timeout 504
httpVersionNotSupported505 :: Status
HTTP Version Not Supported 505
statusIsInformational :: Status -> Bool
Informational class
statusIsSuccessful :: Status -> Bool
Successful class
statusIsRedirection :: Status -> Bool
Redirection class
statusIsClientError :: Status -> Bool
Client Error class
statusIsServerError :: Status -> Bool
Server Error class
Headers
Types
type Header = (HeaderName, ByteString)
Header
type HeaderName = CI ByteString
Header name
type RequestHeaders = [Header]
Request Headers
type ResponseHeaders = [Header]
Response Headers
Common headers
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
hContentEncoding :: HeaderName
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
hDate :: HeaderName
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
hIfModifiedSince :: HeaderName
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
hRange :: HeaderName
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP Header names According to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Byte ranges
data ByteRange
RFC 2616 Byte range (individual).
Negative indices are not allowed!
Constructors
ByteRangeFrom !Integer | |
ByteRangeFromTo !Integer !Integer | |
ByteRangeSuffix !Integer |
type ByteRanges = [ByteRange]
RFC 2616 Byte ranges (set).
URI
Query string
type QueryItem = (ByteString, Maybe ByteString)
Query item
type SimpleQueryItem = (ByteString, ByteString)
Simplified Query item type without support for parameter-less items.
type SimpleQuery = [SimpleQueryItem]
Simplified Query type without support for parameter-less items.
simpleQueryToQuery :: SimpleQuery -> Query
Convert SimpleQuery
to Query
.
Arguments
:: Bool | prepend question mark? |
-> Query | |
-> ByteString |
Convert Query
to ByteString
.
Convert Query
to a Builder
.
Arguments
:: Bool | prepend question mark? |
-> SimpleQuery | |
-> ByteString |
Convert SimpleQuery
to ByteString
.
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".
parseSimpleQuery :: ByteString -> SimpleQuery
Parse SimpleQuery
from a ByteString
.
Text query string (UTF8 encoded)
type QueryText = [(Text, Maybe Text)]
Like Query, but with Text
instead of ByteString
(UTF8-encoded).
queryTextToQuery :: QueryText -> Query
queryToQueryText :: Query -> QueryText
parseQueryText :: ByteString -> QueryText
Parse QueryText
from a ByteString
. See parseQuery
for details.
Generalized query types
class QueryLike a where
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.
Instances
(QueryKeyLike k, QueryValueLike v) => QueryLike [(k, v)] | |
(QueryKeyLike k, QueryValueLike v) => QueryLike [Maybe (k, v)] |
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.
- 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]
Parse a list of path segments from a valid URL fragment.
encodePathSegmentsRelative :: [Text] -> Builder
Like encodePathSegments, but without the initial slash.
Path (segments + query string)
extractPath :: ByteString -> ByteString
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 -> Builder
Encode a whole path (path segments + query).
decodePath :: ByteString -> ([Text], Query)
Decode a whole path (path segments + query).
URL encoding / decoding
Arguments
:: Bool | Whether input is in query string. True: Query string, False: Path element |
-> ByteString | |
-> Builder |
Percent-encoding for URLs (using Builder
).
Arguments
:: Bool | Whether to decode |
-> ByteString | The ByteString to encode as URL |
-> ByteString | The encoded URL |
Percent-encoding for URLs.