docs: private URL convertRequestToUrl(InternalRequest request) {
          String resourcePath = HttpUtils.normalizePath(request.getUri().getPath());
  
          // Removed the padding "/" that was already added into the request's resource path.
          if (resourcePath.startsWith("/")) {
              resourcePath = resourcePath.substring(1);
          }
  
          // Some http client libraries (e.g. Apache HttpClient) cannot handle
          // consecutive "/"s between URL authority and path components.
          // So we escape "////..." into "/%2F%2F%2F...", in the same way as how
          // we treat consecutive "/"s in AmazonS3Client#presignRequest(...)
          String urlPath = "/" + resourcePath;
          urlPath = urlPath.replaceAll("(?<=/)/", "%2F");
          String urlString = this.getEndpoint() + urlPath;
  
          boolean firstParam = true;
          for (String param : request.getParameters().keySet()) {
              if (firstParam) {
                  urlString += "?";
                  firstParam = false;
              } else {
                  urlString += "&";
              }
  
              String value = request.getParameters().get(param);
              urlString += param + "=" + HttpUtils.normalize(value);
          }
  
          String authorization = request.getHeaders().get(Headers.AUTHORIZATION);
          if (authorization != null) {
              if (firstParam) {
                  urlString += "?";
              } else {
                  urlString += "&";
              }
              urlString += "authorization" + "=" + HttpUtils.normalize(authorization);
          }
  
          try {
              return new URL(urlString);
          } catch (MalformedURLException e) {
              throw new BceClientException("Unable to convert request to well formed URL: " + e.getMessage(), e);
          }
      }