Sample code for 30+ languages & platforms
Xbase++

S3 Get Object Metadata, such as ETag

See more Amazon S3 (new) Examples

Demonstrates how to get an S3 object's metadata using a HEAD request.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oRest
LOCAL nBTls
LOCAL nPort
LOCAL nBAutoReconnect
LOCAL oAuthAws
LOCAL nStatusCode
LOCAL cEtag

nSuccess := 0

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

oRest := CreateObject("Chilkat.Rest")

//  Connect to the Amazon AWS REST server in the desired region.
//  In this case we connect to S3 in the "us-west-2" region.
nBTls := 1
nPort := 443
nBAutoReconnect := 1
nSuccess := oRest:Connect("s3-us-west-2.amazonaws.com", nPort, nBTls, nBAutoReconnect)

//  Provide AWS credentials.
oAuthAws := CreateObject("Chilkat.AuthAws")
oAuthAws:AccessKey := "AWS_ACCESS_KEY"
oAuthAws:SecretKey := "AWS_SECRET_KEY"
oAuthAws:ServiceName := "s3"

//  This particular bucket is in the Oregon region, as opposed to the US Standard,
//  therefore the Region must be set appropriately.
//  Also note that we connected to "s3-us-west-2.amazonaws.com".
oAuthAws:Region := "us-west-2"

nSuccess := oRest:SetAuthAws(oAuthAws)

//  Note: The above REST connection and setup of the AWS credentials
//  can be done once.  After connecting, any number of REST calls can be made.
//  The "auto reconnect" property passed to rest.Connect indicates that if
//  the connection is lost, a REST method call will automatically reconnect
//  if needed.
//  --------------------------------------------------------------------------

//  Set the bucket name via the HOST header.
//  In this case, the bucket name is "chilkat.ocean".
//  Note that the Host header should use "bucketName.s3.amazonaws.com", not "bucketName.s3-us-west-2.amazonaws.com"
oRest:Host := "chilkat.ocean.s3.amazonaws.com"

//  Our object is "starfish.jpg".
//  Get the metadata.
//  Since we are sending a HEAD request, we shouldn't use any of the Full* methods.
//  Instead, send the request, then just read the response header.
nSuccess := oRest:SendReqNoBody("HEAD", "/starfish.jpg")
IF (nSuccess != 1)
    ? oRest:LastErrorText
    oRest:destroy()
    oAuthAws:destroy()
    RETURN
ENDIF

//  Now get the response header.
nStatusCode := oRest:ReadResponseHeader()
IF (nStatusCode < 0)
    ? oRest:LastErrorText
    oRest:destroy()
    oAuthAws:destroy()
    RETURN
ENDIF

//  When successful, the S3 Storage service will respond with a 200 response code,
//  with an XML body.  
IF (nStatusCode != 200)
    //  Examine the request/response to see what happened.
    ? "response status code = " + Str(nStatusCode)
    ? "response status text = " + oRest:ResponseStatusText
    ? "response header: " + oRest:ResponseHeader
    oRest:destroy()
    oAuthAws:destroy()
    RETURN
ENDIF

//  The response header contains information about the S3 object.
//  For example:

//  	HTTP/1.1 200 OK
//  	x-amz-id-2: GrV/hrB2EUkBlWc0h3JDdmVIrYDXfPC7CGvo/qSVRmYRPwilAOry8+4r2YWl4xJfa1HRYXrP808=
//  	x-amz-request-id: 4BDC6D6AEA0BDEF3
//  	Date: Mon, 13 May 2019 22:03:13 GMT
//  	Last-Modified: Mon, 10 Nov 2014 16:10:23 GMT
//  	ETag: "2e9c59dbf2662367dc97dfdda85da048"
//  	Accept-Ranges: bytes
//  	Content-Type: image/jpg
//  	Content-Length: 6229
//  	Server: AmazonS3

//  Get the ETag response header value:
cEtag := oRest:ResponseHdrByName("ETag")
? "ETag: " + cEtag

oRest:destroy()
oAuthAws:destroy()