38 lines
1.2 KiB
Diff
38 lines
1.2 KiB
Diff
diff --git a/awscli/botocore/awsrequest.py b/awscli/botocore/awsrequest.py
|
|
index f7a18a3..bf1ca13 100644
|
|
--- a/awscli/botocore/awsrequest.py
|
|
+++ b/awscli/botocore/awsrequest.py
|
|
@@ -14,6 +14,7 @@
|
|
import functools
|
|
import io
|
|
import logging
|
|
+from collections.abc import Mapping
|
|
import socket
|
|
import sys
|
|
|
|
@@ -24,6 +25,7 @@ from botocore.compat import (
|
|
HTTPResponse,
|
|
MutableMapping,
|
|
urlencode,
|
|
+ urlparse,
|
|
urlsplit,
|
|
urlunsplit,
|
|
)
|
|
@@ -375,8 +377,14 @@ class AWSRequestPreparer:
|
|
def _prepare_url(self, original):
|
|
url = original.url
|
|
if original.params:
|
|
- params = urlencode(list(original.params.items()), doseq=True)
|
|
- url = f'{url}?{params}'
|
|
+ url_parts = urlparse(url)
|
|
+ delim = '&' if url_parts.query else '?'
|
|
+ if isinstance(original.params, Mapping):
|
|
+ params_to_encode = list(original.params.items())
|
|
+ else:
|
|
+ params_to_encode = original.params
|
|
+ params = urlencode(params_to_encode, doseq=True)
|
|
+ url = delim.join((url, params))
|
|
return url
|
|
|
|
def _prepare_headers(self, original, prepared_body=None):
|