I'm trying to figure out how make a basic GET request using Network.HTTP.simpleHTTP that will use a proxy.
I have tried setting the http_proxy environment variable, and I think I understand how to make a Proxy using Network.HTTP.Proxy. But there seems to be nothing in the API on Hackage for how to set a simpleHTTP call or Request type to use a proxy.
The current code I have is:
import Network.HTTP
import Network.HTTP.Proxy
import Data.Maybe
main = do
let proxy = fromJust $ parseProxy "proxyserver.foo.com:80"
x <- simpleHTTP (getRequest "http://www.google.com") >>= getResponseBody
print x
From the documentation for simpleHTTP:
simpleHTTP reqtransmits theRequest reqby opening a direct, non-persistent connection to the HTTP server... If you have to mediate the request via an HTTP proxy, you will have to normalize the request yourself. Or switch to usingNetwork.Browserinstead.
I'm not really sure what the authors mean by "normalize the request yourself" here. I don't see how it would be possible with the simpleHTTP in Network.HTTP—I think you'd have to use the one in Network.HTTP.HandleStream.
So why not just use Network.Browser instead? It's very handy:
import Control.Applicative ((<$>))
import Data.Maybe (fromJust)
import Network.Browser
import Network.HTTP
import Network.HTTP.Proxy (parseProxy)
main = do
rsp <- browse $ do
setProxy . fromJust $ parseProxy "127.0.0.1:8118"
request $ getRequest "http://www.google.com"
print $ rspBody <$> rsp
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With