2

最初にコードを示し、次にエラー、次に型情報を示します。質問は次のとおりです。何が起こっているのかをどのように把握できますか? どうすれば問題を解決できますか?

readTask = do
   req' <-  parseUrl "https://10.64.251.32/rest/api/latest/issue/BNAP-291"
   manager <- newManager manSettings
   let req'' = applyBasicAuth (pack "sandboxer") (pack "sandboxer") req'
   Response _ _ _ body <-runResourceT $ http req'' manager 
   pBody <- runResourceT $
            body $$+- sinkParser json

   --   print pBody
   --   closeManager manager

   return ()
      where manSettings =
               def
                 { managerCheckCerts = \ _ _ -> return CertificateUsageAccept }

これはうまくコンパイルされます。コンパイルされたコードを実行するとどうなるか

dist/build/Spike/Spike
Spike: <socket: 3>: hGetBuf: illegal operation (handle is closed)

body次のタイプです

Data.Conduit.Internal.ResumableSource
(Control.Monad.Trans.Resource.ResourceT IO)
Data.ByteString.Internal.ByteString

フィードバックをお寄せいただきありがとうございます。この問題のトラブルシューティングを開始する方法がわかりません。

4

1 に答える 1

1

最初のrunResourceT呼び出しは、本文が解析される前にソケットを閉じています。runResourceT2 つの呼び出しを 1つに結合する必要があります。ResourceTMonadインスタンスであるためdo、構文解析が完了した後、記法といくつかの簡単な操作を使用してソケットを解放できます。

readTask = do
   req' <-  parseUrl "https://10.64.251.32/rest/api/latest/issue/BNAP-291"
   manager <- newManager manSettings
   let req'' = applyBasicAuth (pack "sandboxer") (pack "sandboxer") req'
   runResourceT $ do
      Response _ _ _ body <- http req'' manager 
      pBody <- body $$+- sinkParser json
      liftIO $ print pBody

   closeManager manager

   return ()
      where manSettings =
               def
                 { managerCheckCerts = \ _ _ -> return CertificateUsageAccept }
于 2012-11-08T20:34:33.557 に答える