@@ -72,6 +72,36 @@ def __init__(self, host, req_timeout=60, debug=False, proxy=None, is_http=False,
7272 self .request_size = 0
7373 self .response_size = 0
7474
75+ def _build_url (self , base_url , path = None , query_params = None ):
76+ """Build complete URL from base_url, path and query parameters.
77+
78+ Ensures no double slashes between domain and path.
79+
80+ :param base_url: Base URL (scheme + domain)
81+ :type base_url: str
82+ :param path: URL path
83+ :type path: str
84+ :param query_params: Query parameters
85+ :type query_params: str
86+ :return: Complete URL
87+ :rtype: str
88+ """
89+ # Start with base URL, remove trailing slash if present
90+ url = base_url .rstrip ('/' )
91+
92+ # Add path if provided
93+ if path :
94+ # Ensure path starts with /
95+ if not path .startswith ('/' ):
96+ path = '/' + path
97+ url += path
98+
99+ # Add query parameters if provided
100+ if query_params :
101+ url += '?' + query_params
102+
103+ return url
104+
75105 def set_req_timeout (self , req_timeout ):
76106 self .req_timeout = req_timeout
77107
@@ -89,14 +119,14 @@ def _request(self, req_inter):
89119 req_inter .header ["Connection" ] = "Keep-Alive"
90120 if self .debug :
91121 logger .debug ("SendRequest %s" % req_inter )
122+
92123 if req_inter .method == 'GET' :
93- req_inter_url = '%s?%s' % (self .host , req_inter .data )
124+ # For GET requests, parameters are in the query string (req_inter.data)
125+ req_inter_url = self ._build_url (self .host , req_inter .uri , req_inter .data )
94126 return self .conn .request (req_inter .method , req_inter_url , None , req_inter .header , req_inter .auth )
95127 elif req_inter .method == 'POST' or req_inter .method == 'PUT' or req_inter .method == 'DELETE' :
96- if req_inter .uri_params :
97- req_inter_url = '%s?%s' % (self .host , req_inter .uri_params )
98- else :
99- req_inter_url = self .host
128+ # For POST/PUT/DELETE, use uri_params for query string if present
129+ req_inter_url = self ._build_url (self .host , req_inter .uri , req_inter .uri_params if req_inter .uri_params else None )
100130 return self .conn .request (req_inter .method , req_inter_url , req_inter .data , req_inter .header , req_inter .auth )
101131 else :
102132 raise KsyunSDKException ("ClientParamsError" , 'Method only support (GET, POST, PUT, DELETE)' )
@@ -115,7 +145,7 @@ def send_request(self, req_inter):
115145
116146
117147class RequestInternal (object ):
118- def __init__ (self , host = "" , method = "" , uri = "" , header = None , data = "" ,auth = None ):
148+ def __init__ (self , host = "" , method = "" , uri = "" , header = None , data = "" , auth = None ):
119149 if header is None :
120150 header = {}
121151 self .host = host
@@ -124,6 +154,7 @@ def __init__(self, host="", method="", uri="", header=None, data="",auth=None):
124154 self .header = header
125155 self .data = data
126156 self .auth = auth
157+ self .uri_params = None # Query parameters for POST/PUT/DELETE requests
127158
128159 def __str__ (self ):
129160 headers = "\n " .join ("%s: %s" % (k , v ) for k , v in self .header .items ())
0 commit comments