code: private <X extends AmazonWebServiceRequest> Request<X> createRequestForPresignedUrl(X originalRequest,
                                                                                          HttpMethodName httpMethod,
                                                                                          URL endpoint) {
          Request<X> request = new DefaultRequest<X>(originalRequest, Constants.S3_SERVICE_DISPLAY_NAME);
          request.setHttpMethod(httpMethod);
  
          try {
              request.setEndpoint(endpoint.toURI());
          } catch (URISyntaxException e) {
              throw new SdkClientException(e);
          }
  
          if (originalRequest.getCustomRequestHeaders() != null) {
              for (Map.Entry<String, String> entry : originalRequest.getCustomRequestHeaders().entrySet()) {
                  request.addHeader(entry.getKey(), entry.getValue());
              }
          }
  
          // Content-Type is signed in SigV2 signer
          // If no Content-Type is present, SDK puts a default type in Apache http layer, which will make the call fail with
          // Signature error. So set it to empty string for sigv2 presigned urls when user don't provide a Content-Type value
          if (request.getHeaders().get(Headers.CONTENT_TYPE) == null && isSigV2PresignedUrl(endpoint)) {
              request.addHeader(Headers.CONTENT_TYPE, "");
          }
  
          request.addHandlerContext(S3HandlerContextKeys.IS_CHUNKED_ENCODING_DISABLED,
                                    Boolean.valueOf(clientOptions.isChunkedEncodingDisabled()));
          request.addHandlerContext(S3HandlerContextKeys.IS_PAYLOAD_SIGNING_ENABLED,
                                    Boolean.valueOf(clientOptions.isPayloadSigningEnabled()));
          request.addHandlerContext(HandlerContextKey.SERVICE_ID, SERVICE_ID);
  
          return request;
      }
docs: Method to create {@link Request} object. This method is intended to be used only by operations that use S3
  presigned URL.
  
  This method has special behavior that is not used by normal APIs (that don't use presigned url) like:
  1) Setting empty Content-Type header when url is signed with SigV2 signer
  2) Ignoring signer, credentials when constructing the request object