2010-10-04 17 views
6

我想弄清楚如何使用Network.HTTP.simpleHTTP使用代理進行基本的GET請求。使用Haskell的SimpleHTTP和代理?

我已經嘗試設置http_proxy環境變量,並且我想我理解如何使用Network.HTTP.Proxy製作代理服務器。但是Hackage上的API似乎沒有關於如何設置一個簡單的HTTP呼叫或請求類型來使用代理的問題。

當前代碼我是:

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 

回答

9

documentationsimpleHTTP

simpleHTTP req通過打開直接, 非持久到HTTP 連接發送Request req服務器... 如果您必須通過 調解HTTP代理,您將h大約 自己規範化請求。或者 改爲使用Network.Browser 代替。

我不太確定作者在這裏用「自己規範化請求」的意思。我不明白中的simpleHTTP怎麼可能 - 我認爲你必須使用Network.HTTP.HandleStream中的那個。

那麼爲什麼不使用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 
+0

謝謝,這是第一次嘗試。是的,在發佈後不久,我在API中看到'正常化'的評論,但不知道如何去做。 – devrand 2010-10-04 19:13:50

+0

+1用於添加代碼示例:) – Daniel 2010-10-04 21:12:23