Я пытаюсь использовать haxr 3000.8.5 для загрузки изображений в блог WordPress , используя API metaWeblog ---, в частности метод newMediaObject .
Я заставил его работать с небольшими изображениями, успешно загрузив значки 20x20 в форматах PNG и JPG. Однако, когда я пробую изображения среднего -размера (, скажем, 300x300 ), я получаю исключение ErrorClosed
, предположительно из пакета HTTP (. и обнаружил, что haxr в конечном итоге вызываетNetwork.HTTP.simpleHTTP
).
Может ли кто-нибудь пролить свет на причины, по которым вызов simpleHTTP
может завершиться ошибкой с ErrorClosed
? Предложения о том, что можно попробовать, и возможные обходные пути также приветствуются.
Вот ссылки на полный вывод tcpdump из успешной загрузки и из неудачной загрузки .
Код (очищенный )также показан ниже на случай, если он пригодится.
import Network.XmlRpc.Client (remote)
import Network.XmlRpc.Internals (Value(..), toValue)
import Data.Char (toLower)
import System.FilePath (takeFileName, takeExtension)
import qualified Data.ByteString.Char8 as B
import Data.Functor ((<$>))
uploadMediaObject :: FilePath -> IO Value
uploadMediaObject file = do
media <- mkMediaObject file
remote "http://someblog.wordpress.com/xmlrpc.php" "metaWeblog.newMediaObject"
"default" "username" "password" media
-- Create the required struct representing the image.
mkMediaObject :: FilePath -> IO Value
mkMediaObject filePath = do
bits <- B.unpack <$> B.readFile filePath
return $ ValueStruct
[ ("name", toValue fileName)
, ("type", toValue fileType)
, ("bits", ValueBase64 bits)
]
where
fileName = takeFileName filePath
fileType = case (map toLower. drop 1. takeExtension) fileName of
"png" -> "image/png"
"jpg" -> "image/jpeg"
"jpeg" -> "image/jpeg"
"gif" -> "image/gif"
main = do
v <- uploadMediaObject "images/puppy.png"
print v