1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
------------------------------------------------------------------------------
--- Library for dealing with URLs (Uniform Resource Locators).
---
--- @author Michael Hanus
--- @version October 2019
------------------------------------------------------------------------------

module System.URL ( getContentsOfUrl ) where

import Directory ( getTemporaryDirectory )
import FilePath  ( (</>) )
import System    ( getPID, system )
import IOExts    ( readCompleteFile )

--- Reads the contents of a document located by a URL.
--- This action requires that the program "wget" is in your path,
--- otherwise the implementation must be adapted to the local
--- installation.
getContentsOfUrl :: String -> IO String
getContentsOfUrl url = do
  tmpdir <- getTemporaryDirectory
  pid    <- getPID
  let tmpfile = tmpdir </> "wgeturl." ++ show pid
  system $ "wget -O " ++ tmpfile ++ " \"" ++ url ++ "\""
  cont <- readCompleteFile tmpfile
  system $ "rm -f "++tmpfile
  return cont