2010-10-04 30 views
6

Tôi đang cố gắng tìm ra cách thực hiện yêu cầu GET cơ bản bằng Network.HTTP.simpleHTTP sẽ sử dụng proxy.Sử dụng SimpleHTTP của Haskell bằng Proxy?

Tôi đã thử đặt biến môi trường http_proxy và tôi nghĩ mình hiểu cách tạo Proxy bằng Network.HTTP.Proxy. Nhưng dường như không có gì trong API trên Hackage về cách thiết lập cuộc gọi đơn giảnHTHT hoặc Yêu cầu loại để sử dụng proxy.

Mã hiện tại tôi có là:

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 

Trả lời

9

Từ documentation cho simpleHTTP:

simpleHTTP req truyền Request req bằng cách mở một, kết nối trực tiếp không liên tục với HTTP máy chủ ... Nếu bạn phải dàn xếp yêu cầu qua proxy HTTP, bạn sẽ ave to bình thường hóa yêu cầu của bạn. Hoặc chuyển sang sử dụng Network.Browser để thay thế.

Tôi không thực sự chắc chắn ý nghĩa của các tác giả bằng cách "bình thường hóa yêu cầu của chính mình" tại đây. Tôi không thấy làm thế nào nó có thể với simpleHTTP trong Network.HTTP —Tôi nghĩ rằng bạn sẽ phải sử dụng số điện thoại trong Network.HTTP.HandleStream.

Vậy tại sao không chỉ sử dụng Network.Browser thay thế? Nó rất tiện dụng:

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

Cảm ơn bạn đã thử trước tiên. Vâng, tôi đã thấy bình luận 'bình thường hóa' trong API ngay sau khi đăng nhưng không có đầu mối cách thực hiện. – devrand

+0

+1 để thêm mẫu mã :) – Daniel

Các vấn đề liên quan