diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,11 @@
+* 3000.11.1 (10 July 2015)
+
+  - Support both HTTP and HTTPS automatically, depending on URL.
+  - Bug fixes:
+    - read port properly
+    - set request path properly
+    - set content-length header
+
 * 3000.11 (1 June 2015)
 
   - Switch from the HTTP package to http-streams, and add support for
diff --git a/Network/XmlRpc/Client.hs b/Network/XmlRpc/Client.hs
--- a/Network/XmlRpc/Client.hs
+++ b/Network/XmlRpc/Client.hs
@@ -41,23 +41,24 @@
 
 import           Data.Functor               ((<$>))
 import           Data.Maybe
+import           Data.Int
 import           Network.URI
 import           Text.Read.Compat           (readMaybe)
 
 import           Network.Http.Client        (Method (..), Request,
                                              baselineContextSSL, buildRequest,
                                              closeConnection, getStatusCode,
-                                             getStatusMessage, http,
+                                             getStatusMessage, http, openConnection,
                                              inputStreamBody, openConnectionSSL,
                                              receiveResponse, sendRequest,
                                              setAuthorizationBasic,
-                                             setContentType, setHeader)
+                                             setContentType, setContentLength, setHeader)
 import           OpenSSL
 import qualified System.IO.Streams          as Streams
 
 import qualified Data.ByteString.Char8      as BS
 import qualified Data.ByteString.Lazy.Char8 as BSL (ByteString, fromChunks,
-                                                    unpack)
+                                                    unpack, length)
 import qualified Data.ByteString.Lazy.UTF8  as U
 
 -- | Gets the return value from a method response.
@@ -162,13 +163,18 @@
 -- FIXME: should we really use fail?
 post_ :: URI -> URIAuth -> HeadersAList -> BSL.ByteString -> IO U.ByteString
 post_ uri auth headers content = withOpenSSL $ do
-    ctx <- baselineContextSSL
     let hostname = BS.pack (uriRegName auth)
-        port     = fromMaybe 443 (readMaybe $ uriPort auth)
+        port     = fromMaybe 443 (readMaybe $ tail $ uriPort auth)
 
-    c <- openConnectionSSL ctx hostname port
+    c <- case init $ uriScheme uri of
+        "http"  ->
+            openConnection hostname port
+        "https" -> do
+            ctx <- baselineContextSSL
+            openConnectionSSL ctx hostname port
+        x -> fail ("Unknown scheme: '" ++ x ++ "'!")
 
-    req  <- request uri auth headers
+    req  <- request uri auth headers (BSL.length content)
     body <- inputStreamBody <$> Streams.fromLazyByteString content
 
     _ <- sendRequest c req body
@@ -193,10 +199,12 @@
         Just bs -> (bs:) <$> go
 
 -- | Create an XML-RPC compliant HTTP request.
-request :: URI -> URIAuth -> [(BS.ByteString, BS.ByteString)] -> IO Request
-request uri auth usrHeaders = buildRequest $ do
-    http POST (BS.pack $ show uri)
+request :: URI -> URIAuth -> [(BS.ByteString, BS.ByteString)] -> Int64 -> IO Request
+request uri auth usrHeaders len = buildRequest $ do
+    http POST (BS.pack $ uriPath uri)
     setContentType "text/xml"
+    setContentLength len
+
     case parseUserInfo auth of
       (Just user, Just pass) -> setAuthorizationBasic (BS.pack user) (BS.pack pass)
       _                      -> return ()
diff --git a/haxr.cabal b/haxr.cabal
--- a/haxr.cabal
+++ b/haxr.cabal
@@ -1,5 +1,5 @@
 Name: haxr
-Version: 3000.11
+Version: 3000.11.1
 Cabal-version: >=1.10
 Build-type: Simple
 Copyright: Bjorn Bringert, 2003-2006
