2014-07-10 131 views
0

頭我無法弄清楚如何從從服務器的響應得到Content-Length頭:獲得來自HTTP響應

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 

您的建議?

+0

確實,一個Content-Length頭髮送? – Seb

+0

@Seb,這與它是否被髮送無關。這是關於如何檢索它的解決方案。 –

回答

1

這是因爲hContentLength只是不區分大小寫的字符串,而不是函數。你不能應用它。

然而,由於CI aEq一個實例任何Eq a,你可以簡單地使用lookup

getContentLength :: ResponseHeaders -> Maybe ByteString 
getContentLength = lookup hContentLength 
+0

'hContentType只是一個不區分大小寫的字符串'這是什麼意思?在文檔中我看不到它是一個字符串。 –

+0

@AlexanderSuperamp:['hContentLength'](http://hackage.haskell.org/package/http-types-0.8.5/docs/Network-HTTP-Types.html#v:hContentLength)是一個'HeaderName',這是一個'CI ByteString'。順便說一下, – Zeta

+0

,沒有「Content-Disposition」標題,是嗎? http://hackage.haskell.org/package/http-types-0.8.5/docs/Network-HTTP-Types-Header.html#t:HeaderName –