Sample code for 30+ languages & platforms
Xbase++

S3 Get Bucket Policy

See more Amazon S3 (new) Examples

Demonstrates how to send a GET request to fetch the policy of a specified bucket. The following information is quoted from the AWS REST API reference documentation at http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETpolicy.html
To use this operation, you must have GetPolicy permissions on the specified bucket, and you must be the bucket owner.

If you don't have GetPolicy permissions, Amazon S3 returns a 403 Access Denied error. If you have the correct permissions, but you're not the bucket owner, Amazon S3 returns a 405 Method Not Allowed error. If the bucket does not have a policy, Amazon S3 returns a 404 Policy Not found error. There are restrictions about who can create bucket policies and which objects in a bucket they can apply to. For more information, go to Using Bucket Policies.

Important: This example requires Chilkat v9.5.0.66 or greater.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oRest
LOCAL nBTls
LOCAL nPort
LOCAL nBAutoReconnect
LOCAL oAuthAws
LOCAL cResponseJsonStr
LOCAL oJson

nSuccess := 0

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

//  Important: This example requires Chilkat v9.5.0.66 or greater.

oRest := CreateObject("Chilkat.Rest")

//  Connect to the Amazon AWS REST server in the desired 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"

//  Get the policy.
cResponseJsonStr := oRest:FullRequestNoBody("GET", "/?policy")
IF (oRest:LastMethodSuccess != 1)
    ? 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 (oRest:ResponseStatusCode != 200)
    //  Examine the request/response to see what happened.
    ? "response status code = " + Str(oRest:ResponseStatusCode)
    ? "response status text = " + oRest:ResponseStatusText
    ? "response header: " + oRest:ResponseHeader
    ? "response body: " + cResponseJsonStr
    ? "---"
    ? "LastRequestStartLine: " + oRest:LastRequestStartLine
    ? "LastRequestHeader: " + oRest:LastRequestHeader
ENDIF

? "response body: " + cResponseJsonStr

//  Load the JSON and display in a more human-readable manner:
oJson := CreateObject("Chilkat.JsonObject")
oJson:Load(cResponseJsonStr)
oJson:EmitCompact := 0
? oJson:Emit()

//  Sample output:

//  	{ 
//  	  "Version": "2012-10-17",
//  	  "Statement": [
//  	    { 
//  	      "Effect": "Allow",
//  	      "Resource": "arn:aws:s3.asp">chilkat.ocean/",
//  	      "Principal": "*"
//  	    }
//  	  ]
//  	}
//

oRest:destroy()
oAuthAws:destroy()
oJson:destroy()