全部产品
Search
文档中心

Object Storage Service:Bayar-per-permintaan (Python SDK V1)

更新时间:Nov 09, 2025

Ketika fitur bayar-per-permintaan diaktifkan untuk sebuah bucket di Object Storage Service (OSS), pemohon akan dikenakan biaya permintaan dan lalu lintas, bukan pemilik bucket. Pemilik bucket hanya dikenakan biaya penyimpanan. Anda dapat mengaktifkan fitur ini untuk berbagi data dalam bucket tanpa membayar biaya permintaan dan lalu lintas yang timbul dari akses ke bucket Anda.

Catatan penggunaan

  • Dalam topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses Menggunakan OSS SDK untuk Python 1.0.

  • Dalam topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Layanan Token Keamanan (STS), lihat Inisialisasi.

  • Untuk mengaktifkan bayar-per-permintaan, Anda harus memiliki izin oss:PutBucketRequestPayment. Untuk menanyakan konfigurasi bayar-per-permintaan, Anda harus memiliki izin oss:GetBucketRequestPayment. Untuk informasi lebih lanjut, lihat Lampirkan Kebijakan Kustom ke Pengguna RAM.

Atur mode bayar-per-permintaan

Berikut adalah contoh kode untuk mengaktifkan bayar-per-permintaan pada sebuah bucket:

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import PAYER_BUCKETOWNER, PAYER_REQUESTER

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Tentukan wilayah tempat titik akhir berada, misalnya cn-hangzhou. Perhatikan bahwa parameter ini diperlukan untuk tanda tangan V4.
region = "cn-hangzhou"

# Atur yourBucketName ke nama bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Atur mode bayar-per-permintaan. Payer default adalah PAYER_BUCKETOWNER.
result = bucket.put_bucket_request_payment(PAYER_REQUESTER)

print("status respons http: ", result.status)

Dapatkan konfigurasi mode bayar-per-permintaan

Berikut adalah contoh kode untuk menanyakan konfigurasi bayar-per-permintaan sebuah bucket:

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Tentukan wilayah tempat titik akhir berada, misalnya cn-hangzhou. Perhatikan bahwa parameter ini diperlukan untuk tanda tangan V4.
region = "cn-hangzhou"

# Atur yourBucketName ke nama bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Dapatkan konfigurasi mode bayar-per-permintaan.
result = bucket.get_bucket_request_payment()
print('payer:', result.payer)

Akses pihak ketiga ke objek dengan pembayaran oleh pemohon

Jika Anda menentukan bahwa pihak ketiga dikenakan biaya untuk akses ke objek dalam sebuah bucket, pemohon harus menyertakan header x-oss-request-payer:requester dalam permintaan HTTP untuk melakukan operasi pada objek Anda. Jika header ini tidak disertakan, kesalahan akan dikembalikan.

Berikut adalah contoh kode untuk menentukan bahwa pihak ketiga dikenakan biaya saat mereka mengakses objek dengan memanggil operasi PutObject, GetObject, dan DeleteObject. Anda dapat menggunakan metode ini untuk menentukan bahwa pihak ketiga dikenakan biaya saat mereka melakukan operasi baca dan tulis pada objek dengan memanggil operasi API lainnya dengan cara serupa.

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.headers import OSS_REQUEST_PAYER

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Tentukan wilayah tempat titik akhir berada, misalnya cn-hangzhou. Perhatikan bahwa parameter ini diperlukan untuk tanda tangan V4.
region = "cn-hangzhou"

# Atur yourBucketName ke nama bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Tentukan jalur lengkap objek. Jalur lengkap tidak boleh berisi nama bucket. Contoh: exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
headers = dict()
headers[OSS_REQUEST_PAYER] = "requester"

# Tentukan header saat Anda mengunggah file.
result = bucket.put_object(object_name, 'test-content', headers=headers)

# Tentukan header saat Anda mengunduh file.
result = bucket.get_object(object_name, headers=headers)

# Tentukan header saat Anda menghapus file.
result = bucket.delete_object(object_name, headers=headers)

Referensi

  • Untuk kode sampel lengkap fitur bayar-per-permintaan, lihat Contoh GitHub.

  • Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk mengaktifkan bayar-per-permintaan, lihat PutBucketRequestPayment.

  • Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk menanyakan konfigurasi bayar-per-permintaan, lihat GetBucketRequestPayment.