You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用putStrLn或类似函数打印wreq响应内容至终端?

正确打印wreq响应内容的方法

嘿,我来帮你搞定wreq响应打印的问题!你遇到的报错大概率是因为对wreq的Response结构和ByteString的处理方式理解有点偏差,咱们一步步来修正:

首先得明确两个核心点:

  • wreq返回的Response对象本身不是ByteString,它的responseBody字段才是真正的响应内容(默认是Data.ByteString.Lazy.ByteString,也就是懒加载的ByteString类型)
  • 直接用unpack会报错,要么是你没导入对应ByteString模块的unpack函数,要么是误把整个Response对象当成ByteString来处理了

第一步:导入必要的模块

你的main.hs需要补充这些导入:

{-# LANGUAGE OverloadedStrings #-}

import Network.Wreq (get)
import Control.Lens ((^.))  -- 用来访问Response里的字段(wreq依赖lens来做字段访问)
import Network.Wreq.Types (responseBody)
import Data.ByteString.Lazy.Char8 (unpack)  -- 专门处理懒ByteString的unpack函数
-- 要是你需要处理UTF-8编码的文本,也可以用这组替代上面的bytestring导入:
-- import Data.Text.Encoding (decodeUtf8)
-- import Data.Text (unpack)
-- import qualified Data.ByteString.Lazy as L

第二步:完整的示例代码

下面是能正常运行的完整代码,发起GET请求并打印响应内容:

{-# LANGUAGE OverloadedStrings #-}

import Network.Wreq (get)
import Control.Lens ((^.))
import Network.Wreq.Types (responseBody)
import Data.ByteString.Lazy.Char8 (unpack)

main :: IO ()
main = do
  -- 发起GET请求,拿到Response对象
  resp <- get "https://example.com"
  -- 提取响应体(ByteString),转成String后打印
  putStrLn $ unpack (resp ^. responseBody)
  
  -- 如果你想直接打印原始ByteString(会显示字节的转义格式,适合看二进制数据,不推荐文本):
  -- print (resp ^. responseBody)
  
  -- 处理UTF-8文本的另一种更规范的方式:
  -- let strictBody = L.toStrict $ resp ^. responseBody
  --     textBody = decodeUtf8 strictBody
  -- putStrLn $ unpack textBody

第三步:确保项目依赖正确

不管用.cabal还是stack,都需要把依赖加上。如果是.cabal文件,在build-depends里添加:

build-depends:
  base >= 4.14 && < 5,
  wreq >= 0.5,
  lens,
  bytestring,
  text  -- 用Text处理的话需要加这个

如果用stack,它会自动解析依赖,但你也可以在stack.yaml的extra-deps里指定版本(一般不需要,stack会找兼容的版本)。

常见错误排查

  • 你可能试过直接unpack resp,但resp是Response ByteString类型,不是ByteString,必须用resp ^. responseBody提取出响应体
  • 如果用了Data.ByteString.unpack(严格ByteString的unpack)去处理懒ByteString,会类型不匹配报错,要对应用Data.ByteString.Lazy.Char8.unpack
  • 忘记导入Control.Lens的(^.)运算符,导致无法访问responseBody字段,这也是常见编译错误

按照上面的修改,再用stack build编译应该就能正常运行,把响应内容打印到终端啦!

内容的提问来源于stack exchange,提问作者Mark Karavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:01:58