@@ -67,7 +67,7 @@ import Control.Monad.Catch (MonadCatch (..), MonadThrow)
6767import Control.Monad.Trans.Class (lift )
6868import Control.Monad.Trans.Except (ExceptT (.. ), runExceptT )
6969import Data.Aeson (eitherDecode )
70- import Data.List (find )
70+ import Data.List (find , intercalate )
7171import Data.String (fromString )
7272import Data.Tagged (Tagged (.. ))
7373import Data.Version (showVersion )
@@ -79,7 +79,9 @@ import Network.HTTP.Client
7979import Network.HTTP.Link.Parser (parseLinkHeaderBS )
8080import Network.HTTP.Link.Types (Link (.. ), LinkParam (.. ), href , linkParams )
8181import Network.HTTP.Types (Method , RequestHeaders , Status (.. ))
82- import Network.URI (URI , parseURIReference , relativeTo )
82+ import Network.URI
83+ (URI , escapeURIString , isUnescapedInURIComponent , parseURIReference ,
84+ relativeTo )
8385
8486import qualified Data.ByteString as BS
8587import qualified Data.ByteString.Lazy as LBS
@@ -409,11 +411,12 @@ makeHttpRequest auth r = case r of
409411 . setMethod (toMethod m)
410412 $ req
411413 where
412- parseUrl' :: MonadThrow m => Text -> m HTTP. Request
413- parseUrl' = HTTP. parseUrlThrow . T. unpack
414+ parseUrl' :: MonadThrow m => String -> m HTTP. Request
415+ parseUrl' = HTTP. parseUrlThrow
414416
415- url :: Paths -> Text
416- url paths = maybe " https://api.github.com" id (endpoint =<< auth) <> " /" <> T. intercalate " /" paths
417+ url :: Paths -> String
418+ url paths = maybe " https://api.github.com" T. unpack (endpoint =<< auth) ++ " /" ++ intercalate " /" paths' where
419+ paths' = map (escapeURIString isUnescapedInURIComponent . T. unpack) paths
417420
418421 setReqHeaders :: HTTP. Request -> HTTP. Request
419422 setReqHeaders req = req { requestHeaders = reqHeaders <> requestHeaders req }
0 commit comments