2010-10-04 18 views
6

Próbuję dowiedzieć się, jak zrobić podstawowe żądanie GET przy użyciu Network.HTTP.simpleHTTP, które będą korzystać z serwera proxy.Korzystanie z SimpleHTTP Haskell z proxy?

Próbowałem ustawić zmienną środowiskową http_proxy, i myślę, że rozumiem, jak zrobić Proxy za pomocą Network.HTTP.Proxy. Wygląda jednak na to, że w interfejsie API Hackage nie ma nic o tym, jak ustawić wywołanie simpleHTTP lub Typ żądania w celu użycia proxy.

Obecny kod mam jest:

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 

Odpowiedz

9

Z documentation do simpleHTTP:

simpleHTTP req transmituje Request req otwierając bezpośredniego, nietrwałe połączenie HTTP serwer ... Jeśli musisz pośredniczyć w żądaniu za pośrednictwem , serwer proxy HTTP ave do znormalizuj żądanie samodzielnie. Lub zamiast tego przełącz się na używanie Network.Browser .

Nie jestem do końca pewien, co autorzy rozumieją przez "znormalizowanie żądania samodzielnie" tutaj. Nie widzę, jak byłoby to możliwe z simpleHTTP w Network.HTTP - Myślę, że musiałbyś użyć tego w Network.HTTP.HandleStream.

Dlaczego więc nie używać po prostu Network.Browser? Jest bardzo przydatny:

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

Dzięki, to działało pierwsze próby. Tak, widziałem ten "normalizujący" komentarz w API wkrótce po wysłaniu, ale nie miałem pojęcia, jak to zrobić. – devrand

+0

+1 za dodanie próbki kodu :) – Daniel