2010-10-04 8 views
6

J'essaie de comprendre comment faire une requête GET de base en utilisant Network.HTTP.simpleHTTP qui utilisera un proxy.Utilisation de SimpleHTTP de Haskell avec un proxy?

J'ai essayé de définir la variable d'environnement http_proxy, et je pense que je comprends comment créer un proxy en utilisant Network.HTTP.Proxy. Mais il ne semble rien dans l'API sur Hackage pour savoir comment définir un appel simpleHTTP ou un type de requête pour utiliser un proxy.

Le code actuel j'ai est:

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 

Répondre

9

De l'documentation pour simpleHTTP:

simpleHTTP req transmet le Request req en ouvrant une directe, connexion non persistante au HTTP serveur ... Si vous devez négocier la demande via un proxy HTTP, vous devrez ave à normaliser la demande vous-même. Ou passer à utiliser Network.Browser à la place.

Je ne suis pas vraiment sûr de ce que les auteurs veulent dire par "normaliser la demande" ici. Je ne vois pas comment cela serait possible avec le simpleHTTP dans Network.HTTP -Je pense que vous devriez utiliser celui de Network.HTTP.HandleStream.

Alors pourquoi ne pas simplement utiliser Network.Browser à la place? C'est très pratique:

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

Merci, cela a fonctionné premier essai. Oui, j'ai vu ce commentaire 'normaliser' dans l'API peu après avoir posté, mais je n'avais aucune idée de comment le faire non plus. – devrand

+0

+1 pour l'ajout d'un exemple de code :) – Daniel

Questions connexes