也许做事的方式很愚蠢,但就是这样。我想将 HTTP 请求发送/接收与处理响应分开。
import Pipes
import qualified Pipes.HTTP as HTTP
import Pipes.Core
import qualified Pipes.ByteString as PB
import Network.Socket (withSocketsDo)
fetch m url = do
req <- lift $ HTTP.parseUrl url
resp <- lift $ HTTP.withHTTP req m return
url' <- respond $ HTTP.responseBody resp
fetch m url'
client :: Client String (Producer PB.ByteString IO ()) IO ()
client = do
b <- request "http://www.google.com"
lift $ runEffect $ b >-> PB.stdout
main = withSocketsDo $ HTTP.withManager HTTP.tlsManagerSettings $ \m ->
runEffect $ fetch m +>> client
似乎合法。但是我得到了部分响应打印和“Network.Socket.ByteString.recv:失败(未知错误)”。我需要做些什么不同的事情?