gpt4 book ai didi

haskell - 如何让 Haskell 的 Network.Browser 进行 gzip 压缩?

转载 作者:行者123 更新时间:2023-12-02 17:17:35 26 4
gpt4 key购买 nike

Haskell 的 Network.Browser 模块似乎没有进行任何压缩。我如何配置它,以便它在假设服务器支持的情况下进行 gzip 压缩(如果不支持,则回退到不压缩)?

最佳答案

这是 rkhayrov 提到的“相当简单”的解决方案的快速版本:

import Codec.Compression.GZip (decompress)
import Control.Arrow (second)
import Control.Monad (liftM)
import qualified Data.ByteString.Lazy as B
import Network.Browser
import Network.HTTP (Request, Response, getRequest, getResponseBody, rspBody)
import Network.HTTP.Headers (HasHeaders, HeaderName (..), findHeader, replaceHeader)
import Network.TCP (HStream, HandleStream)
import Network.URI (URI, parseURI)

gzipRequest :: URI -> BrowserAction (HandleStream B.ByteString) (URI, Response B.ByteString)
gzipRequest
= liftM (second unzipIfNeeded)
. request
. replaceHeader HdrAcceptEncoding "gzip"
. defaultGETRequest_
where
unzipIfNeeded rsp
| isGz rsp = rsp { rspBody = decompress $ rspBody rsp }
| otherwise = rsp
where
isGz rsp = maybe False (== "gzip") $ findHeader HdrContentEncoding rsp

我使用以下内容进行了一些测试:

main = print =<< rspBody . snd <$> (getResponse =<< head <$> getArgs)
where
getResponse = browse . gzipRequest . fromJust . parseURI

它在 Yahoo 上都按预期工作。 (压缩)和Google (未压缩)主页。

关于haskell - 如何让 Haskell 的 Network.Browser 进行 gzip 压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com