Sophie

Sophie

distrib > * > 2010.0 > * > by-pkgid > fb7b6fc8f70999876180462ef754dc21 > files > 20

haskell-HTTP-2006.7.7-2mdv2007.1.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>Network.HTTP</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock.js" TYPE="text/javascript"
></SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>HTTP-2006.7.7: </TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>Network.HTTP</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>non-portable (not tested)</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>bjorn@bringert.net</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>Constants
</A
></DT
><DT
><A HREF="#2"
>HTTP 
</A
></DT
><DT
><A HREF="#3"
>Header Functions
</A
></DT
><DT
><A HREF="#4"
>URL Encoding
</A
></DT
><DT
><A HREF="#5"
>URI authority parsing
</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>An easy HTTP interface enjoy.
</P
><UL
><LI
> Changes by Simon Foster:
      - Split module up into to sepearate Network.[Stream,TCP,HTTP] modules
      - Created functions receiveHTTP and responseHTTP to allow server side interactions
        (although 100-continue is unsupported and I haven't checked for standard compliancy).
      - Pulled the transfer functions from sendHTTP to global scope to allow access by
        above functions.
</LI
><LI
> Changes by Graham Klyne:
      - export httpVersion
      - use new URI module (similar to old, but uses revised URI datatype)
</LI
><LI
> Changes by Bjorn Bringert:
</LI
><LI
> handle URIs with a port number
      - added debugging toggle
      - disabled 100-continue transfers to get HTTP/1.0 compatibility
      - change ioError to throw
      - Added simpleHTTP_, which takes a stream argument.
</LI
><LI
> Changes from 0.1
      - change openHTTP to <TT
><A HREF="Network-TCP.html#v%3AopenTCP"
>openTCP</A
></TT
>, removed closeTCP - use <TT
><A HREF="Network-Stream.html#v%3Aclose"
>close</A
></TT
> from <TT
><A HREF="Network-Stream.html#t%3AStream"
>Stream</A
></TT
> class.
      - added use of inet_addr to openHTTP, allowing use of IP <A HREF="dot.html"
>dot</A
> notation addresses.
      - reworking of the use of Stream, including alterations to make <TT
><A HREF="Network-HTTP.html#v%3AsendHTTP"
>sendHTTP</A
></TT
> generic
        and the addition of a debugging stream.
      - simplified error handling.
</LI
><LI
> TODO
     - request pipelining
     - https upgrade (includes full TLS, i.e. SSL, implementation)
         - use of Stream classes will pay off
         - consider C implementation of encryption/decryption
     - comm timeouts
     - MIME &amp; entity stuff (happening in separate module)
     - support &quot;*&quot; uri-request-string for OPTIONS request method
</LI
><LI
> Header notes:
</LI
></UL
><DL
><DT
><TT
>Host</TT
></DT
><DD
>
                  Required by HTTP/1.1, if not supplied as part
                  of a request a default Host value is extracted
                  from the request-uri.
</DD
><DT
><TT
>Connection</TT
></DT
><DD
> 
                  If this header is present in any request or
                  response, and it's value is <A HREF="close.html"
>close</A
>, then
                  the current request/response is the last 
                  to be allowed on that connection.
</DD
><DT
><TT
>Expect</TT
></DT
><DD
>
                  Should a request contain a body, an Expect
                  header will be added to the request.  The added
                  header has the value &quot;100-continue&quot;.  After
                  a 417 &quot;Expectation Failed&quot; response the request
                  is attempted again without this added Expect
                  header.
</DD
><DT
><TT
>TransferEncoding,ContentLength,...</TT
></DT
><DD
>
                  if request is inconsistent with any of these
                  header values then you may not receive any response
                  or will generate an error response (probably 4xx).
</DD
></DL
><UL
><LI
> Response code notes
 Some response codes induce special behaviour:
</LI
></UL
><DL
><DT
><TT
>1xx</TT
></DT
><DD
>   &quot;100 Continue&quot; will cause any unsent request body to be sent.
             &quot;101 Upgrade&quot; will be returned.
             Other 1xx responses are ignored.
</DD
><DT
><TT
>417</TT
></DT
><DD
>   The reason for this code is &quot;Expectation failed&quot;, indicating
             that the server did not like the Expect &quot;100-continue&quot; header
             added to a request.  Receipt of 417 will induce another
             request attempt (without Expect header), unless no Expect header
             had been added (in which case 417 response is returned).
</DD
></DL
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>module <A HREF="Network-Stream.html"
>Network.Stream</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
>module <A HREF="Network-TCP.html"
>Network.TCP</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AhttpVersion"
>httpVersion</A
> :: String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3ARequest"
>Request</A
>  = <A HREF="#v%3ARequest"
>Request</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArqURI"
>rqURI</A
> :: URI</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArqMethod"
>rqMethod</A
> :: <A HREF="Network-HTTP.html#t%3ARequestMethod"
>RequestMethod</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArqHeaders"
>rqHeaders</A
> :: [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>]</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArqBody"
>rqBody</A
> :: String</TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3AResponse"
>Response</A
>  = <A HREF="#v%3AResponse"
>Response</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArspCode"
>rspCode</A
> :: ResponseCode</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArspReason"
>rspReason</A
> :: String</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArspHeaders"
>rspHeaders</A
> :: [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>]</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3ArspBody"
>rspBody</A
> :: String</TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3ARequestMethod"
>RequestMethod</A
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3AHEAD"
>HEAD</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3APUT"
>PUT</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AGET"
>GET</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3APOST"
>POST</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AOPTIONS"
>OPTIONS</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ATRACE"
>TRACE</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsimpleHTTP"
>simpleHTTP</A
> :: <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
> -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsimpleHTTP_"
>simpleHTTP_</A
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
> -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsendHTTP"
>sendHTTP</A
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
> -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AreceiveHTTP"
>receiveHTTP</A
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ArespondHTTP"
>respondHTTP</A
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
> -&gt; IO ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="#t%3AHasHeaders"
>HasHeaders</A
> x </TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3AHeader"
>Header</A
>  = <A HREF="#v%3AHeader"
>Header</A
> <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3AHeaderName"
>HeaderName</A
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3AHdrCacheControl"
>HdrCacheControl</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrConnection"
>HdrConnection</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrDate"
>HdrDate</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrPragma"
>HdrPragma</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrTransferEncoding"
>HdrTransferEncoding</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrUpgrade"
>HdrUpgrade</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrVia"
>HdrVia</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrAccept"
>HdrAccept</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrAcceptCharset"
>HdrAcceptCharset</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrAcceptEncoding"
>HdrAcceptEncoding</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrAcceptLanguage"
>HdrAcceptLanguage</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrAuthorization"
>HdrAuthorization</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrCookie"
>HdrCookie</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrExpect"
>HdrExpect</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrFrom"
>HdrFrom</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrHost"
>HdrHost</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrIfModifiedSince"
>HdrIfModifiedSince</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrIfMatch"
>HdrIfMatch</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrIfNoneMatch"
>HdrIfNoneMatch</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrIfRange"
>HdrIfRange</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrIfUnmodifiedSince"
>HdrIfUnmodifiedSince</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrMaxForwards"
>HdrMaxForwards</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrProxyAuthorization"
>HdrProxyAuthorization</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrRange"
>HdrRange</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrReferer"
>HdrReferer</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrUserAgent"
>HdrUserAgent</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrAge"
>HdrAge</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrLocation"
>HdrLocation</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrProxyAuthenticate"
>HdrProxyAuthenticate</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrPublic"
>HdrPublic</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrRetryAfter"
>HdrRetryAfter</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrServer"
>HdrServer</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrSetCookie"
>HdrSetCookie</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrVary"
>HdrVary</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrWarning"
>HdrWarning</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrWWWAuthenticate"
>HdrWWWAuthenticate</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrAllow"
>HdrAllow</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentBase"
>HdrContentBase</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentEncoding"
>HdrContentEncoding</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentLanguage"
>HdrContentLanguage</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentLength"
>HdrContentLength</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentLocation"
>HdrContentLocation</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentMD5"
>HdrContentMD5</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentRange"
>HdrContentRange</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentType"
>HdrContentType</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrETag"
>HdrETag</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrExpires"
>HdrExpires</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrLastModified"
>HdrLastModified</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrContentTransferEncoding"
>HdrContentTransferEncoding</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AHdrCustom"
>HdrCustom</A
> String</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AinsertHeader"
>insertHeader</A
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; String -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AinsertHeaderIfMissing"
>insertHeaderIfMissing</A
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; String -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AinsertHeaders"
>insertHeaders</A
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>] -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AretrieveHeaders"
>retrieveHeaders</A
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; a -&gt; [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AreplaceHeader"
>replaceHeader</A
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; String -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AfindHeader"
>findHeader</A
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; a -&gt; Maybe String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AurlEncode"
>urlEncode</A
> :: String -&gt; String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AurlDecode"
>urlDecode</A
> :: String -&gt; String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AurlEncodeVars"
>urlEncodeVars</A
> :: [(String, String)] -&gt; String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3AURIAuthority"
>URIAuthority</A
>  = <A HREF="#v%3AURIAuthority"
>URIAuthority</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3Auser"
>user</A
> :: (Maybe String)</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Apassword"
>password</A
> :: (Maybe String)</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Ahost"
>host</A
> :: String</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Aport"
>port</A
> :: (Maybe Int)</TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AparseURIAuthority"
>parseURIAuthority</A
> :: String -&gt; Maybe <A HREF="Network-HTTP.html#t%3AURIAuthority"
>URIAuthority</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Documentation</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
>module <A HREF="Network-Stream.html"
>Network.Stream</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
>module <A HREF="Network-TCP.html"
>Network.TCP</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="1"
>Constants
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AhttpVersion"
></A
><B
>httpVersion</B
> :: String</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="2"
>HTTP 
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3ARequest"
></A
><B
>Request</B
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>An HTTP Request.
 The Show instance of this type is used for message serialisation,
 which means no body data is output.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3ARequest"
></A
><B
>Request</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3ArqURI"
></A
><B
>rqURI</B
> :: URI</TD
><TD CLASS="rdoc"
>might need changing in future
  1) to support * uri in OPTIONS request
  2) transparent support for both relative
     &amp; absolute uris, although this should
     already work (leave scheme &amp; host parts empty).
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ArqMethod"
></A
><B
>rqMethod</B
> :: <A HREF="Network-HTTP.html#t%3ARequestMethod"
>RequestMethod</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ArqHeaders"
></A
><B
>rqHeaders</B
> :: [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>]</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ArqBody"
></A
><B
>rqBody</B
> :: String</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Request')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:Request" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
></TD
></TR
><TR
><TD CLASS="decl"
>Show <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3AResponse"
></A
><B
>Response</B
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>An HTTP Response.
 The Show instance of this type is used for message serialisation,
 which means no body data is output, additionally the output will
 show an HTTP version of 1.1 instead of the actual version returned
 by a server.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3AResponse"
></A
><B
>Response</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3ArspCode"
></A
><B
>rspCode</B
> :: ResponseCode</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ArspReason"
></A
><B
>rspReason</B
> :: String</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ArspHeaders"
></A
><B
>rspHeaders</B
> :: [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>]</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ArspBody"
></A
><B
>rspBody</B
> :: String</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Response')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:Response" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
></TD
></TR
><TR
><TD CLASS="decl"
>Show <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3ARequestMethod"
></A
><B
>RequestMethod</B
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>The HTTP request method, to be used in the <TT
><A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
></TT
> object.
 We are missing a few of the stranger methods, but these are
 not really necessary until we add full TLS.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3AHEAD"
></A
><B
>HEAD</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3APUT"
></A
><B
>PUT</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AGET"
></A
><B
>GET</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3APOST"
></A
><B
>POST</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AOPTIONS"
></A
><B
>OPTIONS</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3ATRACE"
></A
><B
>TRACE</B
></TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:RequestMethod')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:RequestMethod" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
>Eq <A HREF="Network-HTTP.html#t%3ARequestMethod"
>RequestMethod</A
></TD
></TR
><TR
><TD CLASS="decl"
>Show <A HREF="Network-HTTP.html#t%3ARequestMethod"
>RequestMethod</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AsimpleHTTP"
></A
><B
>simpleHTTP</B
> :: <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
> -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
>)</TD
></TR
><TR
><TD CLASS="doc"
>Simple way to get a resource across a non-persistant connection.
 Headers that may be altered:
  Host        Altered only if no Host header is supplied, HTTP/1.1
              requires a Host header.
  Connection  Where no allowance is made for persistant connections
              the Connection header will be set to <A HREF="close.html"
>close</A
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AsimpleHTTP_"
></A
><B
>simpleHTTP_</B
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
> -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
>)</TD
></TR
><TR
><TD CLASS="doc"
>Like <TT
><A HREF="Network-HTTP.html#v%3AsimpleHTTP"
>simpleHTTP</A
></TT
>, but acting on an already opened stream.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AsendHTTP"
></A
><B
>sendHTTP</B
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
> -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
>)</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AreceiveHTTP"
></A
><B
>receiveHTTP</B
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; IO (<A HREF="Network-Stream.html#t%3AResult"
>Result</A
> <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
>)</TD
></TR
><TR
><TD CLASS="doc"
>Receive and parse a HTTP request from the given Stream. Should be used 
   for server side interactions.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ArespondHTTP"
></A
><B
>respondHTTP</B
> :: <A HREF="Network-Stream.html#t%3AStream"
>Stream</A
> s =&gt; s -&gt; <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
> -&gt; IO ()</TD
></TR
><TR
><TD CLASS="doc"
>Very simple function, send a HTTP response over the given stream. This 
   could be improved on to use different transfer types.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="3"
>Header Functions
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A NAME="t%3AHasHeaders"
></A
><B
>HasHeaders</B
> x </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>This class allows us to write generic header manipulation functions
 for both <TT
><A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
></TT
> and <TT
><A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
></TT
> data types.
</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:HasHeaders')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:HasHeaders" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> <A HREF="Network-HTTP.html#t%3ARequest"
>Request</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> <A HREF="Network-HTTP.html#t%3AResponse"
>Response</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3AHeader"
></A
><B
>Header</B
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>The Header data type pairs header names &amp; values.
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3AHeader"
></A
><B
>Header</B
> <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> String</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Header')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:Header" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
>Show <A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3AHeaderName"
></A
><B
>HeaderName</B
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>HTTP Header Name type:
  Why include this at all?  I have some reasons
   1) prevent spelling errors of header names,
   2) remind everyone of what headers are available,
   3) might speed up searches for specific headers.
</P
><P
>Arguments against:
   1) makes customising header names laborious
   2) increases code volume.
</P
></TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrCacheControl"
></A
><B
>HdrCacheControl</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrConnection"
></A
><B
>HdrConnection</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrDate"
></A
><B
>HdrDate</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrPragma"
></A
><B
>HdrPragma</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrTransferEncoding"
></A
><B
>HdrTransferEncoding</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrUpgrade"
></A
><B
>HdrUpgrade</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrVia"
></A
><B
>HdrVia</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrAccept"
></A
><B
>HdrAccept</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrAcceptCharset"
></A
><B
>HdrAcceptCharset</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrAcceptEncoding"
></A
><B
>HdrAcceptEncoding</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrAcceptLanguage"
></A
><B
>HdrAcceptLanguage</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrAuthorization"
></A
><B
>HdrAuthorization</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrCookie"
></A
><B
>HdrCookie</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrExpect"
></A
><B
>HdrExpect</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrFrom"
></A
><B
>HdrFrom</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrHost"
></A
><B
>HdrHost</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrIfModifiedSince"
></A
><B
>HdrIfModifiedSince</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrIfMatch"
></A
><B
>HdrIfMatch</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrIfNoneMatch"
></A
><B
>HdrIfNoneMatch</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrIfRange"
></A
><B
>HdrIfRange</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrIfUnmodifiedSince"
></A
><B
>HdrIfUnmodifiedSince</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrMaxForwards"
></A
><B
>HdrMaxForwards</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrProxyAuthorization"
></A
><B
>HdrProxyAuthorization</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrRange"
></A
><B
>HdrRange</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrReferer"
></A
><B
>HdrReferer</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrUserAgent"
></A
><B
>HdrUserAgent</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrAge"
></A
><B
>HdrAge</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrLocation"
></A
><B
>HdrLocation</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrProxyAuthenticate"
></A
><B
>HdrProxyAuthenticate</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrPublic"
></A
><B
>HdrPublic</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrRetryAfter"
></A
><B
>HdrRetryAfter</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrServer"
></A
><B
>HdrServer</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrSetCookie"
></A
><B
>HdrSetCookie</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrVary"
></A
><B
>HdrVary</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrWarning"
></A
><B
>HdrWarning</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrWWWAuthenticate"
></A
><B
>HdrWWWAuthenticate</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrAllow"
></A
><B
>HdrAllow</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentBase"
></A
><B
>HdrContentBase</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentEncoding"
></A
><B
>HdrContentEncoding</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentLanguage"
></A
><B
>HdrContentLanguage</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentLength"
></A
><B
>HdrContentLength</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentLocation"
></A
><B
>HdrContentLocation</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentMD5"
></A
><B
>HdrContentMD5</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentRange"
></A
><B
>HdrContentRange</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentType"
></A
><B
>HdrContentType</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrETag"
></A
><B
>HdrETag</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrExpires"
></A
><B
>HdrExpires</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrLastModified"
></A
><B
>HdrLastModified</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrContentTransferEncoding"
></A
><B
>HdrContentTransferEncoding</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AHdrCustom"
></A
><B
>HdrCustom</B
> String</TD
><TD CLASS="rdoc"
>Allows for unrecognised or experimental headers.
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:HeaderName')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:HeaderName" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
>Eq <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
></TD
></TR
><TR
><TD CLASS="decl"
>Show <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AinsertHeader"
></A
><B
>insertHeader</B
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; String -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AinsertHeaderIfMissing"
></A
><B
>insertHeaderIfMissing</B
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; String -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AinsertHeaders"
></A
><B
>insertHeaders</B
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>] -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="doc"
>Inserts multiple headers.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AretrieveHeaders"
></A
><B
>retrieveHeaders</B
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; a -&gt; [<A HREF="Network-HTTP.html#t%3AHeader"
>Header</A
>]</TD
></TR
><TR
><TD CLASS="doc"
>Gets a list of headers with a particular <TT
><A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AreplaceHeader"
></A
><B
>replaceHeader</B
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; String -&gt; a -&gt; a</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AfindHeader"
></A
><B
>findHeader</B
> :: <A HREF="Network-HTTP.html#t%3AHasHeaders"
>HasHeaders</A
> a =&gt; <A HREF="Network-HTTP.html#t%3AHeaderName"
>HeaderName</A
> -&gt; a -&gt; Maybe String</TD
></TR
><TR
><TD CLASS="doc"
>Lookup presence of specific HeaderName in a list of Headers
 Returns the value from the first matching header.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="4"
>URL Encoding
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AurlEncode"
></A
><B
>urlEncode</B
> :: String -&gt; String</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AurlDecode"
></A
><B
>urlDecode</B
> :: String -&gt; String</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AurlEncodeVars"
></A
><B
>urlEncodeVars</B
> :: [(String, String)] -&gt; String</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="5"
>URI authority parsing
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3AURIAuthority"
></A
><B
>URIAuthority</B
> </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3AURIAuthority"
></A
><B
>URIAuthority</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3Auser"
></A
><B
>user</B
> :: (Maybe String)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3Apassword"
></A
><B
>password</B
> :: (Maybe String)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3Ahost"
></A
><B
>host</B
> :: String</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3Aport"
></A
><B
>port</B
> :: (Maybe Int)</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:URIAuthority')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:URIAuthority" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
>Eq <A HREF="Network-HTTP.html#t%3AURIAuthority"
>URIAuthority</A
></TD
></TR
><TR
><TD CLASS="decl"
>Show <A HREF="Network-HTTP.html#t%3AURIAuthority"
>URIAuthority</A
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AparseURIAuthority"
></A
><B
>parseURIAuthority</B
> :: String -&gt; Maybe <A HREF="Network-HTTP.html#t%3AURIAuthority"
>URIAuthority</A
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Parse the authority part of a URL.
</P
><PRE
> RFC 1732, section 3.1:

       //&lt;user&gt;:&lt;password&gt;@&lt;host&gt;:&lt;port&gt;/&lt;url-path&gt;
  Some or all of the parts &quot;&lt;user&gt;:&lt;password&gt;@&quot;, &quot;:&lt;password&gt;&quot;,
  &quot;:&lt;port&gt;&quot;, and &quot;/&lt;url-path&gt;&quot; may be excluded.
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 0.8</TD
></TR
></TABLE
></BODY
></HTML
>