diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index 12ec64a..2c9ae3a 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -188,8 +188,7 @@
 static bool getSkipParam(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                          const crow::Request& req, uint64_t& skip)
 {
-    boost::urls::url_view::params_type::iterator it =
-        req.urlParams.find("$skip");
+    boost::urls::query_params_view::iterator it = req.urlParams.find("$skip");
     if (it != req.urlParams.end())
     {
         std::string skipParam = it->value();
@@ -210,8 +209,7 @@
 static bool getTopParam(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
                         const crow::Request& req, uint64_t& top)
 {
-    boost::urls::url_view::params_type::iterator it =
-        req.urlParams.find("$top");
+    boost::urls::query_params_view::iterator it = req.urlParams.find("$top");
     if (it != req.urlParams.end())
     {
         std::string topParam = it->value();
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index 6e69f20..7383477 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -33,22 +33,23 @@
  */
 inline std::string getTransferProtocolTypeFromUri(const std::string& imageUri)
 {
-    try
+    boost::urls::error_code ec;
+    boost::urls::url_view url =
+        boost::urls::parse_uri(boost::string_view(imageUri), ec);
+    if (ec)
     {
-        std::string_view scheme = boost::urls::url_view(imageUri).scheme();
-        if (scheme == "smb")
-        {
-            return "CIFS";
-        }
-        if (scheme == "https")
-        {
-            return "HTTPS";
-        }
+        return "None";
     }
-    catch (std::exception& p)
+    boost::string_view scheme = url.scheme();
+    if (scheme == "smb")
     {
-        BMCWEB_LOG_ERROR << p.what();
+        return "CIFS";
     }
+    if (scheme == "https")
+    {
+        return "HTTPS";
+    }
+
     return "None";
 }
 
@@ -325,25 +326,26 @@
 inline std::optional<TransferProtocol>
     getTransferProtocolFromUri(const std::string& imageUri)
 {
-    try
+    boost::urls::error_code ec;
+    boost::urls::url_view url =
+        boost::urls::parse_uri(boost::string_view(imageUri), ec);
+    if (ec)
     {
-        std::string_view scheme = boost::urls::url_view(imageUri).scheme();
-        if (scheme == "smb")
-        {
-            return TransferProtocol::smb;
-        }
-        if (scheme == "https")
-        {
-            return TransferProtocol::https;
-        }
-        if (!scheme.empty())
-        {
-            return TransferProtocol::invalid;
-        }
+        return {};
     }
-    catch (std::exception& p)
+
+    boost::string_view scheme = url.scheme();
+    if (scheme == "smb")
     {
-        BMCWEB_LOG_ERROR << p.what();
+        return TransferProtocol::smb;
+    }
+    if (scheme == "https")
+    {
+        return TransferProtocol::https;
+    }
+    if (!scheme.empty())
+    {
+        return TransferProtocol::invalid;
     }
 
     return {};
