Personal tools

Cookbook/Network programming

From HaskellWiki

< Cookbook(Difference between revisions)
Jump to: navigation, search
 
(add browser + proxy example)
Line 13: Line 13:
 
putStrLn contents
 
putStrLn contents
 
hClose h
 
hClose h
 +
</haskell>
 +
 +
The following example do a POST via a proxy
 +
 +
<haskell>
 +
import Network.URI
 +
import Network.HTTP
 +
import Network.Browser
 +
 +
Just pollUri = parseURI "http://example.com/question?life&universe&everything"
 +
body = "answer=42"
 +
headers = [Header HdrContentType "application/x-www-form-urlencoded",
 +
          Header HdrContentLength (show . length $ body)]
 +
 +
pollRq = Request {
 +
rqURI = pollUri, rqMethod = POST,
 +
rqHeaders = headers,
 +
rqBody = body
 +
}
 +
 +
-- Default polipo setting
 +
p = Proxy "localhost:8118" Nothing
 +
 +
main = browse $ do
 +
    setProxy p
 +
    request pollRq
 
</haskell>
 
</haskell>

Revision as of 04:56, 25 March 2010

The following example makes use of the Network and System.IO libraries to open a socket connection to Google and retrieve the Google home page.

    import Network;
    import System.IO;
 
    main = withSocketsDo $ do
	h <- connectTo "www.google.com" (PortNumber 80)
	hSetBuffering h LineBuffering
	hPutStr h "GET / HTTP/1.1\nhost: www.google.com\n\n"
	contents <- hGetContents h
	putStrLn contents
	hClose h

The following example do a POST via a proxy

import Network.URI
import Network.HTTP
import Network.Browser
 
Just pollUri = parseURI "http://example.com/question?life&universe&everything"
body = "answer=42"
headers = [Header HdrContentType "application/x-www-form-urlencoded",
           Header HdrContentLength (show . length $ body)]
 
pollRq = Request {
 rqURI = pollUri, rqMethod = POST,
 rqHeaders = headers,
 rqBody = body
}
 
-- Default polipo setting
p = Proxy "localhost:8118" Nothing
 
main = browse $ do
     setProxy p
     request pollRq