diff --git a/conductr_cli/conduct_load.py b/conductr_cli/conduct_load.py
index 38bc3d8..982965d 100644
--- a/conductr_cli/conduct_load.py
+++ b/conductr_cli/conduct_load.py
@@ -19,11 +19,14 @@ def load(args):
     """`conduct load` command"""
 
     print('Retrieving bundle...')
-    bundle_file, bundle_headers = urlretrieve(get_url(args.bundle))
+    bundle_name, bundle_url = get_url(args.bundle)
+    bundle_file, bundle_headers = urlretrieve(bundle_url)
+
+    configuration_file, configuration_headers, configuration_name = (None, None, None)
     if args.configuration is not None:
         print('Retrieving configuration...')
-    configuration_file, configuration_headers = urlretrieve(get_url(args.configuration)) \
-        if args.configuration is not None else (None, None)
+        configuration_name, configuration_url = get_url(args.configuration)
+        configuration_file, configuration_headers = urlretrieve(configuration_url)
 
     bundle_conf = ConfigFactory.parse_string(bundle_utils.conf(bundle_file))
     overlay_bundle_conf = None if configuration_file is None else \
@@ -39,10 +42,10 @@ def load(args):
         ('roles', ' '.join(with_bundle_configurations(ConfigTree.get_list, 'roles'))),
         ('bundleName', with_bundle_configurations(ConfigTree.get_string, 'name')),
         ('system', with_bundle_configurations(ConfigTree.get_string, 'system')),
-        ('bundle', open(bundle_file, 'rb'))
+        ('bundle', (bundle_name, open(bundle_file, 'rb')))
     ]
     if configuration_file is not None:
-        files.append(('configuration', open(configuration_file, 'rb')))
+        files.append(('configuration', (configuration_name, open(configuration_file, 'rb'))))
 
     print('Loading bundle to ConductR...')
     response = requests.post(url, files=files)
@@ -74,4 +77,5 @@ def get_url(uri):
     parsed = urlparse(uri, scheme='file')
     op = Path(uri)
     np = str(op.cwd() / op if parsed.scheme == 'file' and op.root == '' else parsed.path)
-    return urlunparse(ParseResult(parsed.scheme, parsed.netloc, np, parsed.params, parsed.query, parsed.fragment))
+    url = urlunparse(ParseResult(parsed.scheme, parsed.netloc, np, parsed.params, parsed.query, parsed.fragment))
+    return (url.split('/')[-1], url)

Unable to load bundle from https 
ConductR RC1, CLI 0.15

Loading a bundle via https hangs. The cli must be terminated.

```bash
> conduct load https://github.com/typesafehub/project-doc/releases/download/1.0/project-doc-1.0-SNAPSHOT-e78ed07d4a895e14595a21aef1bf616b1b0e4d886f3265bc7b152acf93d259b5.zip
Retrieving bundle...
Retrieving configuration...
Loading bundle to ConductR...
```
If I wget the bundle to the local file system, the bundle loads successfully.
diff --git a/conductr_cli/test/test_conduct_load.py b/conductr_cli/test/test_conduct_load.py
index b5503cb..93ee6f7 100644
--- a/conductr_cli/test/test_conduct_load.py
+++ b/conductr_cli/test/test_conduct_load.py
@@ -2,6 +2,7 @@ from unittest import TestCase
 from conductr_cli.test.cli_test_case import CliTestCase, create_temp_bundle, create_temp_bundle_with_contents, strip_margin
 from conductr_cli import conduct_load
 from urllib.error import URLError
+import os
 import shutil
 
 try:
@@ -54,7 +55,7 @@ class TestConductLoadCommand(TestCase, CliTestCase):
         ('roles', ' '.join(roles)),
         ('bundleName', bundleName),
         ('system', system),
-        ('bundle', 1)
+        ('bundle', ('bundle.zip', 1))
     ]
 
     output_template = """|Retrieving bundle...
@@ -177,7 +178,7 @@ class TestConductLoadCommand(TestCase, CliTestCase):
             [call(self.bundle_file, 'rb'), call(config_file, 'rb')]
         )
 
-        expected_files = self.default_files + [('configuration', 1)]
+        expected_files = self.default_files + [('configuration', ('bundle.zip', 1))]
         expected_files[4] = ('bundleName', 'overlaid-name')
         http_method.assert_called_with(self.default_url, files=expected_files)
 
@@ -361,3 +362,16 @@ class TestConductLoadCommand(TestCase, CliTestCase):
             strip_margin("""|ERROR: File not found: no_such.conf
                             |"""),
             self.output(stderr))
+
+
+class TestGetUrl(TestCase):
+
+    def test_url(self):
+        filename, url = conduct_load.get_url('https://site.com/bundle-1.0-e78ed07d4a895e14595a21aef1bf616b1b0e4d886f3265bc7b152acf93d259b5.zip')
+        self.assertEqual('bundle-1.0-e78ed07d4a895e14595a21aef1bf616b1b0e4d886f3265bc7b152acf93d259b5.zip', filename)
+        self.assertEqual('https://site.com/bundle-1.0-e78ed07d4a895e14595a21aef1bf616b1b0e4d886f3265bc7b152acf93d259b5.zip', url)
+
+    def test_file(self):
+        filename, url = conduct_load.get_url('bundle-1.0-e78ed07d4a895e14595a21aef1bf616b1b0e4d886f3265bc7b152acf93d259b5.zip')
+        self.assertEqual('bundle-1.0-e78ed07d4a895e14595a21aef1bf616b1b0e4d886f3265bc7b152acf93d259b5.zip', filename)
+        self.assertEqual('file://' + os.getcwd() + '/bundle-1.0-e78ed07d4a895e14595a21aef1bf616b1b0e4d886f3265bc7b152acf93d259b5.zip', url)

pip install -e .
parse_log_pytest
pytest
nose flake8 pep8-naming git+https://github.com/zheller/flake8-quotes#aef86c4f8388e790332757e5921047ad53160a75 pytest
apt-get update apt-get install -y gcc
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
argcomplete==3.6.1
certifi==2025.1.31
charset-normalizer==3.4.1
-e git+https://github.com/typesafehub/conductr-cli.git@357be15356b14f09069cf542e8a4765edd6a0d0a#egg=conductr_cli
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
flake8==7.2.0
flake8-quotes @ git+https://github.com/zheller/flake8-quotes@e75accbd40f0e1fa1e8f0e746b93c9766db8f106
idna==3.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
mccabe==0.7.0
nose==1.3.7
packaging @ file:///croot/packaging_1734472117206/work
pep8-naming==0.14.1
pluggy @ file:///croot/pluggy_1733169602837/work
pycodestyle==2.13.0
pyflakes==3.3.1
pyhocon==0.2.1
pyparsing==2.0.3
pytest @ file:///croot/pytest_1738938843180/work
requests==2.32.3
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
urllib3==2.3.0

name: conductr-cli
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - argcomplete==3.6.1
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - flake8==7.2.0
      - flake8-quotes==3.4.0
      - idna==3.10
      - mccabe==0.7.0
      - nose==1.3.7
      - pep8-naming==0.14.1
      - pycodestyle==2.13.0
      - pyflakes==3.3.1
      - pyhocon==0.2.1
      - pyparsing==2.0.3
      - requests==2.32.3
      - urllib3==2.3.0
prefix: /opt/conda/envs/conductr-cli

conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_invalid_address conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_success conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_success_custom_ip_port conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_success_long_ids conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_success_verbose conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_success_with_configuration conductr_cli/test/test_conduct_load.py::TestGetUrl::test_file conductr_cli/test/test_conduct_load.py::TestGetUrl::test_url
conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_no_bundle conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_no_configuration conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_no_disk_space conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_no_memory conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_no_nr_of_cpus conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_no_roles conductr_cli/test/test_conduct_load.py::TestConductLoadCommand::test_failure_roles_not_a_list
conductr_cli/conduct_load.py
conductr_cli/conduct_load.py