Haskell 从HTTP响应获取头
我不知道如何从服务器的响应中获取内容长度头:Haskell 从HTTP响应获取头,haskell,http-conduit,Haskell,Http Conduit,我不知道如何从服务器的响应中获取内容长度头: import Network.HTTP.Conduit main = do headers <- getHeaders "http://fdsfdsfds.fd" --??? this doesn't compile and a wrong way to go head $ filter (\x -> hContentLength (fst x)) headers getHeaders :: S
import Network.HTTP.Conduit
main = do
headers <- getHeaders "http://fdsfdsfds.fd"
--??? this doesn't compile and a wrong way to go
head $ filter (\x -> hContentLength (fst x)) headers
getHeaders :: String -> IO ResponseHeaders
getHeaders url = do
req <- parseUrl url
res <- withManager $ httpLbs req
return $ responseHeaders res
import Network.HTTP.conductor
main=do
headers这是因为hContentLength
只是一个不区分大小写的字符串,而不是一个函数。你不能应用它
但是,由于CI a
是任何Eq a
的Eq
实例,因此您只需使用lookup
:
getContentLength :: ResponseHeaders -> Maybe ByteString
getContentLength = lookup hContentLength
是否确实发送了内容长度标题?@Seb,这与是否发送无关。这是关于如何检索它的解决方案。hContentType只是一个不区分大小写的字符串
这意味着什么?在文档中,我看不出它是字符串。@AlexanderSupertramp:是一个HeaderName
,它是一个CI ByteString
。顺便说一下,没有“内容处置”头,是吗@AlexanderSupertramp:没有,但是您可以很容易地实现它,只需遵循其他字段的实现即可。但是,您可能需要一个或另一个扩展名(至少OverloadedStrings
)。