使用Haskell的SimpleHTTP与代理?

时间:2010-10-04 17:16:22

标签: networking haskell proxy

我正在试图弄清楚如何使用将使用代理的Network.HTTP.simpleHTTP进行基本的GET请求。

我已尝试设置http_proxy环境变量,我想我了解如何使用Network.HTTP.Proxy创建代理。但是Hackage中的API似乎没有关于如何设置simpleHTTP调用或Request类型来使用代理的信息。

我目前的代码是:

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 

1 个答案:

答案 0 :(得分:9)

来自simpleHTTP的{​​{3}}:

  

simpleHTTP req通过打开直接传输Request req,   与HTTP的非持久连接   服务器...   如果你必须通过调解请求   一个HTTP代理,你将不得不   自己规范化请求。要么   切换到使用Network.Browser   代替。

我不确定作者的意思是“自己规范化请求”。我不知道simpleHTTP中的Network.HTTP是如何实现的 - 我认为您必须使用documentation中的{。}}。

那么为什么不使用Network.Browser呢?它非常方便:

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