http-types-0.6.11: Generic HTTP types for Haskell (for both client and server code).

Safe HaskellSafe-Infered

Network.HTTP.Types

Contents

Synopsis

General

Methods

type Method = Ascii

HTTP method (flat string type).

data StdMethod

HTTP standard method (as defined by RFC 2616).

Constructors

GET 
POST 
HEAD 
PUT 
DELETE 
TRACE 
CONNECT 
OPTIONS 

parseMethod :: Method -> Either Ascii StdMethod

Convert a method ByteString to a StdMethod if possible.

renderMethod :: Either Ascii 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 

Fields

httpMajor :: !Int
 
httpMinor :: !Int
 

http09 :: HttpVersion

HTTP 0.9

http10 :: HttpVersion

HTTP 1.0

http11 :: HttpVersion

HTTP 1.1

Status

data Status

HTTP Status.

Only the statusCode is used for comparisons.

Note that the Show instance is only for debugging.

Constructors

Status 

Instances

status100 :: Status

Continue 100

continue100 :: Status

Continue 100

status101 :: Status

Switching Protocols 101

switchingProtocols101 :: Status

Switching Protocols 101

status200 :: Status

OK 200

ok200 :: Status

OK 200

status201 :: Status

Created 201

created201 :: Status

Created 201

status202 :: Status

Accepted 202

accepted202 :: Status

Accepted 202

status203 :: Status

Non-Authoritative Information 203

nonAuthoritative203 :: Status

Non-Authoritative Information 203

status204 :: Status

No Content 204

noContent204 :: Status

No Content 204

status205 :: Status

Reset Content 205

resetContent205 :: Status

Reset Content 205

status206 :: Status

Partial Content 206

partialContent206 :: Status

Partial Content 206

status300 :: Status

Multiple Choices 300

multipleChoices300 :: Status

Multiple Choices 300

status301 :: Status

Moved Permanently 301

movedPermanently301 :: Status

Moved Permanently 301

status302 :: Status

Found 302

found302 :: Status

Found 302

status303 :: Status

See Other 303

seeOther303 :: Status

See Other 303

status304 :: Status

Not Modified 304

notModified304 :: Status

Not Modified 304

status305 :: Status

Use Proxy 305

useProxy305 :: Status

Use Proxy 305

status307 :: Status

Temporary Redirect 307

temporaryRedirect307 :: Status

Temporary Redirect 307

status400 :: Status

Bad Request 400

badRequest400 :: Status

Bad Request 400

status401 :: Status

Unauthorized 401

unauthorized401 :: Status

Unauthorized 401

status402 :: Status

Payment Required 402

paymentRequired402 :: Status

Payment Required 402

status403 :: Status

Forbidden 403

forbidden403 :: Status

Forbidden 403

status404 :: Status

Not Found 404

notFound404 :: Status

Not Found 404

status405 :: Status

Method Not Allowed 405

methodNotAllowed405 :: Status

Method Not Allowed 405

status406 :: Status

Not Acceptable 406

notAcceptable406 :: Status

Not Acceptable 406

status407 :: Status

Proxy Authentication Required 407

proxyAuthenticationRequired407 :: Status

Proxy Authentication Required 407

status408 :: Status

Request Timeout 408

requestTimeout408 :: Status

Request Timeout 408

status409 :: Status

Conflict 409

conflict409 :: Status

Conflict 409

status410 :: Status

Gone 410

gone410 :: Status

Gone 410

status411 :: Status

Length Required 411

lengthRequired411 :: Status

Length Required 411

status412 :: Status

Precondition Failed 412

preconditionFailed412 :: Status

Precondition Failed 412

status413 :: Status

Request Entity Too Large 413

requestEntityTooLarge413 :: Status

Request Entity Too Large 413

status414 :: Status

Request-URI Too Long 414

requestURITooLong414 :: Status

Request-URI Too Long 414

status415 :: Status

Unsupported Media Type 415

unsupportedMediaType415 :: Status

Unsupported Media Type 415

status416 :: Status

Requested Range Not Satisfiable 416

requestedRangeNotSatisfiable416 :: Status

Requested Range Not Satisfiable 416

status417 :: Status

Expectation Failed 417

expectationFailed417 :: Status

Expectation Failed 417

status418 :: Status

I'm a teapot 418

imATeaPot418 :: Status

I'm a teapot 418

status500 :: Status

Internal Server Error 500

internalServerError500 :: Status

Internal Server Error 500

status501 :: Status

Not Implemented 501

notImplemented501 :: Status

Not Implemented 501

status502 :: Status

Bad Gateway 502

badGateway502 :: Status

Bad Gateway 502

status503 :: Status

Service Unavailable 503

serviceUnavailable503 :: Status

Service Unavailable 503

status504 :: Status

Gateway Timeout 504

gatewayTimeout504 :: Status

Gateway Timeout 504

status505 :: Status

HTTP Version Not Supported 505

httpVersionNotSupported505 :: Status

HTTP Version Not Supported 505

Headers

Types

type Header = (CI Ascii, Ascii)

Header

type RequestHeaders = [Header]

Request Headers

type ResponseHeaders = [Header]

Response Headers

Common headers

Byte ranges

data ByteRange

RFC 2616 Byte range (individual).

Negative indices are not allowed!

type ByteRanges = [ByteRange]

RFC 2616 Byte ranges (set).

Query string

type QueryItem = (ByteString, Maybe ByteString)

Query item

type Query = [QueryItem]

Query.

General form: a=b&c=d, but if the value is Nothing, it becomes a&c=d.

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.

renderQuery

Arguments

:: Bool

prepend question mark?

-> Query 
-> Ascii 

Convert Query to ByteString.

renderQueryBuilder

Arguments

:: Bool

prepend a question mark?

-> Query 
-> Builder 

renderSimpleQuery

Arguments

:: Bool

prepend question mark?

-> SimpleQuery 
-> Ascii 

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)]

renderQueryText

Arguments

:: Bool

prepend a question mark?

-> QueryText 
-> Builder 

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.

encodePathSegmentsRelative :: [Text] -> Builder

Like encodePathSegments, but without the initial slash.

Path (segments + query string)

URL encoding / decoding

urlEncodeBuilder

Arguments

:: Bool

Whether input is in query string. True: Query string, False: Path element

-> ByteString 
-> Builder 

urlDecode

Arguments

:: Bool

Whether to decode + to ' '

-> ByteString 
-> ByteString 

Percent-decoding.

Deprecated functions

statusNotAllowed :: Status

Method Not Allowed 405 (DEPRECATED!)

statusContinue :: Status

Continue 100 (DEPRECATED)

statusSwitchingProtocols :: Status

Switching Protocols 101 (DEPRECATED)

statusOK :: Status

OK 200 (DEPRECATED)

statusCreated :: Status

Created 201 (DEPRECATED)

statusAccepted :: Status

Accepted 202 (DEPRECATED)

statusNonAuthoritative :: Status

Non-Authoritative Information 203 (DEPRECATED)

statusNoContent :: Status

No Content 204 (DEPRECATED)

statusResetContent :: Status

Reset Content 205 (DEPRECATED)

statusPartialContent :: Status

Partial Content 206 (DEPRECATED)

statusMultipleChoices :: Status

Multiple Choices 300 (DEPRECATED)

statusMovedPermanently :: Status

Moved Permanently 301 (DEPRECATED)

statusFound :: Status

Found 302 (DEPRECATED)

statusSeeOther :: Status

See Other 303 (DEPRECATED)

statusNotModified :: Status

Not Modified 304 (DEPRECATED)

statusUseProxy :: Status

Use Proxy 305 (DEPRECATED)

statusTemporaryRedirect :: Status

Temporary Redirect 307 (DEPRECATED)

statusBadRequest :: Status

Bad Request 400 (DEPRECATED)

statusUnauthorized :: Status

Unauthorized 401 (DEPRECATED)

statusPaymentRequired :: Status

Payment Required 402 (DEPRECATED)

statusForbidden :: Status

Forbidden 403 (DEPRECATED)

statusNotFound :: Status

Not Found 404 (DEPRECATED)

statusNotAcceptable :: Status

Not Acceptable 406 (DEPRECATED)

statusProxyAuthenticationRequired :: Status

Proxy Authentication Required 407

statusRequestTimeout :: Status

Request Timeout 408 (DEPRECATED)

statusConflict :: Status

Conflict 409 (DEPRECATED)

statusGone :: Status

Gone 410 (DEPRECATED)

statusLengthRequired :: Status

Length Required 411 (DEPRECATED)

statusPreconditionFailed :: Status

Precondition Failed 412 (DEPRECATED)

statusRequestEntityTooLarge :: Status

Request Entity Too Large 413 (DEPRECATED)

statusRequestURITooLong :: Status

Request-URI Too Long 414 (DEPRECATED)

statusUnsupportedMediaType :: Status

Unsupported Media Type 415 (DEPRECATED)

statusRequestedRangeNotSatisfiable :: Status

Requested Range Not Satisfiable 416 (DEPRECATED)

statusExpectationFailed :: Status

Expectation Failed 417 (DEPRECATED)

statusImATeapot :: Status

I'm a teapot 418 (DEPRECATED)

statusServerError :: Status

Internal Server Error 500 (DEPRECATED)

statusNotImplemented :: Status

Not Implemented 501 (DEPRECATED)

statusBadGateway :: Status

Bad Gateway 502 (DEPRECATED)

statusServiceUnavailable :: Status

Service Unavailable 503 (DEPRECATED)

statusGatewayTimeout :: Status

Gateway Timeout 504 (DEPRECATED)

statusHTTPVersionNotSupported :: Status

HTTP Version Not Supported 505 (DEPRECATED)