- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如何使用 wreq 仅下载响应的前 1 KiB?图书馆?
理论上我可以使用 Range
HTTP header 。但是,这需要服务器的支持,我不能依赖它。
一旦客户端上有足够的数据,我该如何中止请求?
最佳答案
一种选择是使用 foldGet函数,在数据到达时累积数据 block ,并在下载足够的数据后抛出异常。累积的数据将在异常中传递出去。
import qualified Control.Exception as E
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import Data.ByteString.Builder
data EnoughException = Enough Builder
instance Show EnoughException where
show _ = "EnoughException"
instance E.Exception EnoughException
getFile :: Int -> String -> IO BL.ByteString
getFile maxLen url = ((extract . fst) <$> foldGet process (mempty, 0) url) `E.catch` enough
where
extract :: Builder -> String
extract = BL.take (fromIntegral maxLen) . toLazyByteString
process :: (Builder, Int) -- ^(Accumulated data, current length)
-> BS.ByteString -- ^Downloded chunk
-> IO (Builder, Int)
process (acc, cur) now = do
let acc' = acc <> byteString now
let cur' = cur + BS.length now
if cur' > maxLen
then E.throw (Enough acc')
else return (acc', cur')
enough (Enough d) = return (extract d)
(注意:此函数不处理可能由 wreq 抛出的异常。对于实际使用,这是必要的。)
关于http - 如何使用 wreq 只下载部分响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706535/
我想手动创建一个 Response 来模拟 Web 服务器,类似于 this博客文章。但是,我使用的 Network.Wreq 库并未显示 Response 的构造函数。如何手动创建响应? 最佳答案
我非常努力地了解如何使用 lenses 和 wreq,结果它真的让我慢了下来。 错误似乎是声称这里有一些不匹配的类型。我不确定如何处理它。我对 haskell 还很陌生,这些镜头非常令人困惑。然而,w
如何使用 wreq 仅下载响应的前 1 KiB?图书馆? 理论上我可以使用 Range HTTP header 。但是,这需要服务器的支持,我不能依赖它。 一旦客户端上有足够的数据,我该如何中止请求?
我是 Haskell 初学者,目前正在使用 wreq围绕 api 制作一个简单的包装器。我想发送 if-modified-since header (如果提供时间)。我正在以下列方式这样做。 getR
我正在使用 wreq 进行一些 http 调用并希望捕获任何异常并返回 Either类型。我尝试了类似的方法,但无法弄清楚如何操作调用,以便它进行类型检查。 -- exhaustive patter
我想用一些已知的 cookie 键值对(例如 k1=v1; k2=v2; ...)使用 wreq 发出 HTTP 请求, 但找不到创建它们的便捷方法。 因为 Cookie有很多字段,我更喜欢智能构造函
我正在使用 cabal 沙箱,在编译 wreq 库时出现此错误: Network/Wreq/Lens/Machinery.hs:20:58: Couldn't match type `[Nam
给定一个 curl 请求的形式: curl --header "Content-Type: text/xml;charset=UTF-8" --data @somefile.xml http://ht
我试图在 cygwin 中安装 wreq 包并收到以下错误: $ cabal install wreq Resolving dependencies... Configuring wreq-0.5.2
在 IHP 项目中,我尝试添加 wreq至 default.nix如 https://ihp.digitallyinduced.com/Guide/recipes.html#making-a-http
以下是我希望能够使用 wreq 发送 PUT 请求的方式: {-# LANGUAGE OverloadedStrings #-} import Network.Wreq main = put "htt
我使用 Spock 在 Haskell 中编写了一个非常简单的应用程序和 wreq .我想写一些测试,但我不知道该怎么做。 该应用程序所做的只是向另一台服务器发出 HTTP 请求,并将 JSON 响应
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
我正在尝试编写一些代码来对 json API 执行一些请求。我有这个功能: apiLogin = do r FormValue (Maybe a) -- Defined in ‘Netw
我有一个接受 json 请求的服务器,它们可以与 python 客户端一起正常工作。我正在尝试在 haskell 中做同样的事情。 例如我的 python 客户端有以下代码 conn = JSONRP
我是一名优秀的程序员,十分优秀!