Haskell Network.HTTP错误下载图像
我正在尝试使用Network.HTTP模块下载图像,但收效甚微Haskell Network.HTTP错误下载图像,http,haskell,download,Http,Haskell,Download,我正在尝试使用Network.HTTP模块下载图像,但收效甚微 import Network.HTTP main = do jpg <- get "http://www.irregularwebcomic.net/comics/irreg2557.jpg" writeFile "irreg2557.jpg" jpg where get url = simpleHTTP (getRequest url) >>= getResponseBody impor
import Network.HTTP
main = do
jpg <- get "http://www.irregularwebcomic.net/comics/irreg2557.jpg"
writeFile "irreg2557.jpg" jpg where
get url = simpleHTTP (getRequest url) >>= getResponseBody
import Network.HTTP
main=do
jpg>=getResponseBody
输出文件显示在当前目录中,但无法在chromium或ristretto下显示。Ristretto报告“解释JPEG图像文件时出错(不是JPEG文件:以0c3 0xbf开头)”
字符串
。这就是你的问题,就在那里<代码>字符串用于unicode文本。试图在其中存储二进制数据将导致损坏。在这种情况下,不清楚损坏是由simpleHTTP
还是由writeFile
完成的,但这最终并不重要。您使用了错误的类型,当遇到不构成有效unicode编码的字节时,数据被破坏
为了解决这个问题,较新版本的HTTP
在返回类型上是多态的,并且可以处理通过testring返回中的原始字节。您只需要更改将字节写入文件的方式,这样它就不会推断您需要一个字符串
import qualified Data.ByteString as B
import Network.HTTP
import Network.URI (parseURI)
main = do
jpg <- get "http://www.irregularwebcomic.net/comics/irreg2557.jpg"
B.writeFile "irreg2557.jpg" jpg
where
get url = let uri = case parseURI url of
Nothing -> error $ "Invalid URI: " ++ url
Just u -> u in
simpleHTTP (defaultGETRequest_ uri) >>= getResponseBody
导入符合条件的数据.ByteString作为B
导入网络.HTTP
导入Network.URI(parseURI)
main=do
jpg错误$“无效URI:++url
只有你->你在
simpleHTTP(defaultGETRequest\uUri)>>=getResponseBody
获取多态请求的构造有点笨拙。如果得到修复,那么使用getRequest url
就足够了。您的回答有点不正确,因为getRequest
返回一个Request\u字符串,这会阻止它多态。我将在适合我的版本中进行编辑。
import qualified Data.ByteString as B
import Network.HTTP
import Network.URI (parseURI)
main = do
jpg <- get "http://www.irregularwebcomic.net/comics/irreg2557.jpg"
B.writeFile "irreg2557.jpg" jpg
where
get url = let uri = case parseURI url of
Nothing -> error $ "Invalid URI: " ++ url
Just u -> u in
simpleHTTP (defaultGETRequest_ uri) >>= getResponseBody