2010-10-04 9 views
6

Estoy tratando de averiguar cómo hacer una solicitud GET básica usando Network.HTTP.simpleHTTP que usará un proxy.¿Usando el SimpleHTTP de Haskell con un Proxy?

He intentado configurar la variable de entorno http_proxy, y creo que entiendo cómo hacer un Proxy usando Network.HTTP.Proxy. Pero no parece haber nada en la API en Hackage sobre cómo configurar una simple llamada HTTTP o Tipo de solicitud para usar un proxy.

El código actual que tengo es:

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 

Respuesta

9

Desde el documentation para simpleHTTP:

simpleHTTP req transmite la Request req abriendo una, conexión no persistente directa a la HTTP servidor ... Si tiene que mediar la solicitud a través de un proxy HTTP, usted h ave a normalice la solicitud usted mismo. O cambie a usar Network.Browser en su lugar.

No estoy muy seguro de lo que los autores quieren decir con "normalizar la solicitud usted mismo" aquí. No veo cómo sería posible con el simpleHTTP en Network.HTTP, creo que tendrías que usar el de Network.HTTP.HandleStream.

¿Por qué no usar simplemente Network.Browser en su lugar? Es muy útil:

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

Gracias, eso funcionó en primer intento. Sí, vi ese comentario de "normalización" en la API poco después de la publicación, pero no tenía ni idea de cómo hacerlo. – devrand

+0

+1 para agregar una muestra de código :) – Daniel

Cuestiones relacionadas