Le module Network.Browser de Haskell semble ne pas effectuer de compression. Comment est-ce que je peux le configurer de manière à ce qu'il fasse de la compression gzip en supposant que le serveur le supporte (ou ne retombe à aucune compression si ce n'est pas le cas)?Comment faire Network.Browser Haskell faire compression gzip?
3
A
Répondre
3
Voici une version rapide du « assez facile » solution rkhayrov fait référence à:
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
J'ai couru quelques tests avec les éléments suivants:
main = print =<< rspBody . snd <$> (getResponse =<< head <$> getArgs)
where
getResponse = browse . gzipRequest . fromJust . parseURI
Il fonctionne comme prévu sur les deux Yahoo (compressé) et Google (non compressé) pages d'accueil.
+0
Salut Travis. Merci. Ne semble pas "propre", mais fonctionne. – qrest
Questions connexes
- 1. compression GZIP en PHP
- 2. GZIP Compression Issue
- 3. Comment implémenter la compression GZip dans ASP.NET?
- 4. Définition de la compression gzip dans asp.net
- 5. C++ bibliothèque de compression - Deflate ou Gzip
- 6. Exception de compression Gzip en symbian C++
- 7. Problème de compression http Gzip sur iis7
- 8. Activer GZIP Erreur de compression: STATIC_COMPRESSION_NOT_SUCCESS
- 9. compression Gzip ne fonctionne pas sur HTTPS
- 10. Activer la compression gzip dans un environnement Grok-Zope-PasteScript
- 11. Comment vaincre gzip (ou toute autre compression sans perte)
- 12. Impossible de mettre la compression gzip dans JBoss 5
- 13. Comment faire pour définir mod_deflate méthode de compression préférée à dégonfler
- 14. Comment activer GZIP avec gSOAP?
- 15. SOAPMessage - SOAPConnection - gzip - comment
- 16. Comment faire mon code Haskell utiliser Laziness et Garbage collector
- 17. Comment faire correspondre l'Alex avec les nouvelles lignes/Haskell
- 18. Comment faire pour que Haskell calcule le type polymorphique correct?
- 19. GZIP Compression provoquant l'expiration de la page Web
- 20. Comment fonctionne l'algorithme GZip?
- 21. compression gzip pour jquery - ce que j'ai raté?
- 22. Compression en tant que demandes WCF GZip (SOAP et REST)
- 23. Désactiver la compression GZIP pour les clients IE6
- 24. IIS 6.0 Compression Gzip dans la page aspx
- 25. Pourquoi la compression gzip ne fonctionne-t-elle pas?
- 26. Grade D sur les composants de compression avec gzip
- 27. Compression Gzip avec IIS6.0 pour les fichiers sans extension
- 28. Quel est le paramètre de compression GZIP optimal pour IIS?
- 29. La compression GZip sur la requête HTTP avec Tomcat
- 30. comment utiliser gzip en ASP classique
Faites-vous référence à la compression côté client, c'est-à-dire POST-ing de données de formulaire compressées par gzip? Cela nécessiterait une demande OPTIONS "pré-vol". Les serveurs HTTP les plus populaires n'envoient généralement pas l'en-tête Accept-Encoding en réponse à la requête OPTIONS. Au contraire, la décompression de la réponse encodée par gzip est plutôt facile. – rkhayrov