我試圖使用haxr 3000.8.5將圖像上傳到WordPress博客使用metaWeblog API ---特別是, newMediaObject方法。Network.HTTP.simpleHTTP的ErrorClosed異常 - 試圖通過XML-RPC與haxr上傳圖像
我已經得到它的工作小圖像,成功上傳PNG和JPG格式的20x20圖標。然而,當我嘗試中等大小的圖片時(例如300x300),我會得到一個ErrorClosed
例外,大概是從HTTP包(我做了一些源代碼潛水,發現haxr最終調用Network.HTTP.simpleHTTP
)。
任何人都可以闡明爲什麼呼叫simpleHTTP
可能會失敗,ErrorClosed
?建議嘗試和潛在的解決方法也是受歡迎的。
以下是鏈接到full tcpdump output from a successful upload和from an unsuccessful upload。
(消毒)代碼也顯示在下面,以防它有任何用處。
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
您是否嘗試過使用tcpdump或wireshark來檢查HTTP會話? –
感謝您的建議。我對網絡知之甚少,特別是在調試方面。我已經爲該問題添加了一些tcpdump輸出。 –
@BrentYorgey:我想你會想把這個輸出編輯成你的問題。在這裏閱讀格式正確的格式要容易得多,即使它能夠適應您留言評論的有限空間。 –