func GetBucketRegionWithClient(ctx aws.Context, svc s3iface.S3API, bucket string, opts ...request.Option) (string, error) {
	req, _ := svc.HeadBucketRequest(&s3.HeadBucketInput{
		Bucket: aws.String(bucket),
	})
	req.Config.S3ForcePathStyle = aws.Bool(true)

	req.Config.Credentials = credentials.AnonymousCredentials
	req.SetContext(ctx)

	// Disable HTTP redirects to prevent an invalid 301 from eating the response
	// because Go's HTTP client will fail, and drop the response if an 301 is
	// received without a location header. S3 will return a 301 without the
	// location header for HeadObject API calls.
	req.DisableFollowRedirects = true

	var bucketRegion string
	req.Handlers.Send.PushBack(func(r *request.Request) {
		bucketRegion = r.HTTPResponse.Header.Get(bucketRegionHeader)
		if len(bucketRegion) == 0 {
			return
		}
		r.HTTPResponse.StatusCode = 200
		r.HTTPResponse.Status = "OK"
		r.Error = nil
	})
	// Replace the endpoint validation handler to not require a region if an
	// endpoint URL was specified. Since these requests are not authenticated,
	// requiring a region is not needed when an endpoint URL is provided.
	req.Handlers.Validate.Swap(
		corehandlers.ValidateEndpointHandler.Name,
		request.NamedHandler{
			Name: "validateEndpointWithoutRegion",
			Fn:   validateEndpointWithoutRegion,
		},
	)

	req.ApplyOptions(opts...)

	if err := req.Send(); err != nil {
		return "", err
	}

	bucketRegion = s3.NormalizeBucketLocation(bucketRegion)

	return bucketRegion, nil
}
// GetBucketRegionWithClient is the same as GetBucketRegion with the exception
// that it takes a S3 service client instead of a Session. The regionHint is
// derived from the region the S3 service client was created in.
//
// By default the request will be made to the Amazon S3 endpoint using the Path
// style addressing.
//
//    s3.us-west-2.amazonaws.com/bucketname
//
// This is not compatible with Amazon S3's FIPS endpoints. To override this
// behavior to use Virtual Host style addressing, provide a functional option
// that will set the Request's Config.S3ForcePathStyle to aws.Bool(false).
//
//    region, err := s3manager.GetBucketRegionWithClient(ctx, client, "bucketname", func(r *request.Request) {
//        r.S3ForcePathStyle = aws.Bool(false)
//    })
//
// To configure the GetBucketRegion to make a request via the Amazon
// S3 FIPS endpoints directly when a FIPS region name is not available, (e.g.
// fips-us-gov-west-1) set the Config.Endpoint on the Session, or client the
// utility is called with. The hint region will be ignored if an endpoint URL
// is configured on the session or client.
//
//    region, err := s3manager.GetBucketRegionWithClient(context.Background(),
//    s3.New(sess, &aws.Config{
//        Endpoint: aws.String("https://s3-fips.us-west-2.amazonaws.com"),
//    }),
//    "bucketname")
//
// See GetBucketRegion for more information.
GetBucketRegionWithClient is the same as GetBucketRegion with the exception
that it takes a S3 service client instead of a Session. The regionHint is
derived from the region the S3 service client was created in.

By default the request will be made to the Amazon S3 endpoint using the Path
style addressing.

s3.us-west-2.amazonaws.com/bucketname

This is not compatible with Amazon S3's FIPS endpoints. To override this
behavior to use Virtual Host style addressing, provide a functional option
that will set the Request's Config.S3ForcePathStyle to aws.Bool(false).

region, err := s3manager.GetBucketRegionWithClient(ctx, client, "bucketname", func(r *request.Request) {
r.S3ForcePathStyle = aws.Bool(false)
})

To configure the GetBucketRegion to make a request via the Amazon
S3 FIPS endpoints directly when a FIPS region name is not available,  set the Config.Endpoint on the Session, or client the
utility is called with. The hint region will be ignored if an endpoint URL
is configured on the session or client.



See GetBucketRegion for more information.
// GetBucketRegionWithClient is the same as GetBucketRegion with the exception // that it takes a S3 service client instead of a Session . The regionHint is // derived from the region the S3 service client was created in . // // By default the request will be made to the Amazon S3 endpoint using the Path // style addressing . // // s3 . us - west - 2 . amazonaws . com / bucketname // // This is not compatible with Amazon S3 ' s FIPS endpoints . To override this // behavior to use Virtual Host style addressing provide a functional option // that will set the Request ' s Config . S3ForcePathStyle to aws . Bool ( false ) . // // region err : = s3manager . GetBucketRegionWithClient ( ctx client " bucketname " func ( r * request . Request ) { // r . S3ForcePathStyle = aws . Bool ( false ) // } ) // // To configure the GetBucketRegion to make a request via the Amazon // S3 FIPS endpoints directly when a FIPS region name is not available ( e . g . // fips - us - gov - west - 1 ) set the Config . Endpoint on the Session or client the // utility is called with . The hint region will be ignored if an endpoint URL // is configured on the session or client . // // region err : = s3manager . GetBucketRegionWithClient ( context . Background () // s3 . New ( sess &aws . Config { // Endpoint : aws . String ( " https : // s3 - fips . us - west - 2 . amazonaws . com " ) // } ) // " bucketname " ) // // See GetBucketRegion for more information .
func GetBucketRegionWithClient(ctx aws.Context, svc s3iface.S3API, bucket string, opts ...request.Option) (string, error) {
	req, _ := svc.HeadBucketRequest(&s3.HeadBucketInput{
		Bucket: aws.String(bucket),
	})
	req.Config.S3ForcePathStyle = aws.Bool(true)
	req.Config.Credentials = credentials.AnonymousCredentials
	req.SetContext(ctx)
	req.DisableFollowRedirects = true
	var bucketRegion string
	req.Handlers.Send.PushBack(func(r *request.Request) {
		bucketRegion = r.HTTPResponse.Header.Get(bucketRegionHeader)
		if len(bucketRegion) == 0 {
			return
		}
		r.HTTPResponse.StatusCode = 200
		r.HTTPResponse.Status = "OK"
		r.Error = nil
	})
	req.Handlers.Validate.Swap(
		corehandlers.ValidateEndpointHandler.Name,
		request.NamedHandler{
			Name: "validateEndpointWithoutRegion",
			Fn:   validateEndpointWithoutRegion,
		},
	)
	req.ApplyOptions(opts...)
	if err := req.Send(); err != nil {
		return "", err
	}
	bucketRegion = s3.NormalizeBucketLocation(bucketRegion)
	return bucketRegion, nil
}
func GetBucketRegionWithClient ( ctx aws . Context , svc s3iface . S3API , bucket string , opts ... request . Option ) ( string , error ) { req , _ := svc . HeadBucketRequest ( & s3 . HeadBucketInput { Bucket : aws . String ( bucket ) , } ) req . Config . S3ForcePathStyle = aws . Bool ( true ) req . Config . Credentials = credentials . AnonymousCredentials req . SetContext ( ctx ) req . DisableFollowRedirects = true var bucketRegion string req . Handlers . Send . PushBack ( func ( r * request . Request ) { bucketRegion = r . HTTPResponse . Header . Get ( bucketRegionHeader ) if len ( bucketRegion ) == 0 { return } r . HTTPResponse . StatusCode = 200 r . HTTPResponse . Status = " " r . Error = nil } ) req . Handlers . Validate . Swap ( corehandlers . ValidateEndpointHandler . Name , request . NamedHandler { Name : " " , Fn : validateEndpointWithoutRegion , } , ) req . ApplyOptions ( opts ... ) if err := req . Send ( ) ; err != nil { return " " , err } bucketRegion = s3 . NormalizeBucketLocation ( bucketRegion ) return bucketRegion , nil }
GetBucketRegionWithClient is the same as GetBucketRegion with the exception
that it takes a S3 service client instead of a Session.
GetBucketRegionWithClient is the same as GetBucketRegion with the exception that it takes a S3 service client instead of a Session .
// Disable HTTP redirects to prevent an invalid 301 from eating the response // because Go's HTTP client will fail, and drop the response if an 301 is // received without a location header. S3 will return a 301 without the // location header for HeadObject API calls. // Replace the endpoint validation handler to not require a region if an // endpoint URL was specified. Since these requests are not authenticated, // requiring a region is not needed when an endpoint URL is provided.