开发者

Using Haskell's SimpleHTTP with a Proxy?

开发者 https://www.devze.com 2023-01-18 21:21 出处:网络
I\'m trying to figure out 开发者_Python百科how make a basic GET request using Network.HTTP.simpleHTTP that will use a proxy.

I'm trying to figure out 开发者_Python百科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 req transmits the Request req by 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 using Network.Browser instead.

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
0

精彩评论

暂无评论...
验证码 换一张
取 消