Object Storage Service (OSS) C SDK を使用する場合、リクエストオプション (oss_request_options_t) を初期化し、エンドポイントを指定する必要があります。
リクエストオプションの初期化
V4 署名アルゴリズムの使用 (推奨)
セキュリティを向上させるため、V4 署名アルゴリズムを使用することをお勧めします。V4 署名を使用して SDK を初期化する場合、エンドポイントと Alibaba Cloud リージョン ID を指定する必要があります。リージョン ID は、cn-hangzhou など、リクエストの送信先となるリージョンを指定します。また、signature_version = 4 を宣言する必要があります。V4 署名は、OSS SDK for C 3.11.0 以降でサポートされています。
次のサンプルコードは、OSS エンドポイントと V4 署名アルゴリズムを使用して OSSClient インスタンスを作成する例です。カスタムドメイン名または Security Token Service (STS) から取得したアクセス認証情報を使用して OSSClient インスタンスを作成するには、次のサンプルコードを適宜変更してください。
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
/* バケットが所在するリージョンを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t データ型を初期化します。*/
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// 2 つの追加パラメーターを指定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用して OSS にアクセスするかどうかを指定します。値 0 は CNAME を使用しないことを示します。*/
options->config->is_cname = 0;
/* ネットワークパラメーターを指定します。この関数の 2 番目のパラメーターは ctl の所有権を指定します。デフォルトでは、2 番目のパラメーターの値は 0 です。*/
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
aos_pool_t *p;
oss_request_options_t *options;
/* グローバル変数を初期化します。プログラムのライフサイクル中にグローバル変数を初期化する必要があるのは 1 回だけです。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return -1;
}
/* メモリプールとオプションを初期化します。*/
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
/* ロジックコード。この例では、ロジックコードは省略されています。*/
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
aos_pool_destroy(p);
/* 割り当てられたグローバルリソースを解放します。プログラムのライフサイクル中にグローバルリソースを解放する必要があるのは 1 回だけです。*/
aos_http_io_deinitialize();
return 0;
}V1 署名アルゴリズムの使用 (非推奨)
2025 年 3 月 1 日以降、OSS の V1 署名アルゴリズムは、新しい UID を持つ新規のお客様にはご利用いただけなくなります。2025 年 9 月 1 日以降、OSS は V1 署名アルゴリズムの更新とメンテナンスを終了し、V1 署名アルゴリズムは新しいバケットでは利用できなくなります。ビジネスへの影響を防ぐため、できるだけ早く V1 署名を V4 署名にアップグレードしてください。
OSS エンドポイントを使用したリクエストオプションの初期化
次のサンプルコードは、OSS エンドポイントを使用してリクエストオプションを初期化する例です。
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t を初期化します。*/
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* CNAME を使用するかどうかを指定します。値 0 は CNAME を使用しないことを示します。*/
options->config->is_cname = 0;
/* ネットワークパラメーターを指定します。この関数の 2 番目のパラメーターは ctl の所有権を指定します。デフォルトでは、2 番目のパラメーターの値は 0 です。*/
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
aos_pool_t *p;
oss_request_options_t *options;
/* グローバル変数を初期化します。プログラムのライフサイクル中にグローバル変数を初期化する必要があるのは 1 回だけです。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return -1;
}
/* メモリプールとオプションを初期化します。*/
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
/* ロジックコード。この例では、ロジックコードは省略されています。*/
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
aos_pool_destroy(p);
/* 割り当てられたグローバルリソースを解放します。プログラムのライフサイクル中にグローバルリソースを解放する必要があるのは 1 回だけです。*/
aos_http_io_deinitialize();
return 0;
}カスタムドメイン名を使用したリクエストオプションの初期化
次のサンプルコードは、カスタムドメイン名を使用してリクエストオプションを初期化する例です。
#include "oss_api.h"
#include "aos_http_io.h"
/* カスタムドメイン名を指定します。*/
const char *endpoint = "yourCustomEndpoint";
void init_options(oss_request_options_t *options) {
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t を初期化します。*/
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* CNAME を有効にし、カスタムドメイン名をご利用のバケットにマッピングします。*/
options->config->is_cname = 1;
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
aos_pool_t *p;
oss_request_options_t *options;
/* グローバル変数を初期化します。プログラムのライフサイクル中にグローバル変数を初期化する必要があるのは 1 回だけです。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return -1;
}
/* メモリプールとオプションを初期化します。*/
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
/* ロジックコード。この例では、ロジックコードは省略されています。*/
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
aos_pool_destroy(p);
/* 割り当てられたグローバルリソースを解放します。プログラムのライフサイクル中にグローバルリソースを解放する必要があるのは 1 回だけです。*/
aos_http_io_deinitialize();
return 0;
}STS が提供する一時的なアクセス認証情報を使用したリクエストオプションの初期化
次のサンプルコードは、Security Token Service (STS) から取得した一時的なアクセス認証情報を使用してリクエストオプションを初期化する例です。
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
/* サンプルコードを実行する前に、STS から取得した一時的なアクセス認証情報を格納するために、YOUR_ACCESS_KEY_ID および YOUR_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
const char *access_key_id = getenv("YOUR_ACCESS_KEY_ID");
const char *access_key_secret = getenv("YOUR_ACCESS_KEY_SECRET");
/* STS から取得したセキュリティトークンを指定します。*/
const char *sts_token = "<yourSecurityToken>";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t を初期化します。*/
aos_str_set(&options->config->endpoint, endpoint);
aos_str_set(&options->config->access_key_id, access_key_id);
aos_str_set(&options->config->access_key_secret, access_key_secret);
/* トークンを設定します。*/
aos_str_set(&options->config->sts_token, sts_token);
/* CNAME を使用するかどうかを指定します。値 0 は CNAME を使用しないことを示します。*/
options->config->is_cname = 0;
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
aos_pool_t *p;
oss_request_options_t *options;
/* グローバル変数を初期化します。プログラムのライフサイクル中にグローバル変数を初期化する必要があるのは 1 回だけです。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return -1;
}
/* メモリプールとオプションを初期化します。*/
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
/* ロジックコード。この例では、ロジックコードは省略されています。*/
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
aos_pool_destroy(p);
/* 割り当てられたグローバルリソースを解放します。プログラムのライフサイクル中にグローバルリソースを解放する必要があるのは 1 回だけです。*/
aos_http_io_deinitialize();
return 0;
}パラメーター
次の表に、共通パラメーターを示します。
パラメーター | 説明 |
speed_limit | 平均速度の下限。単位:バイト/秒。デフォルト値:1024。 |
speed_time | 平均速度を計算するための最小期間 (秒単位)。デフォルト値は 15 です。 重要 `speed_limit` と `speed_time` の両方のパラメーターが必要です。平均速度が `speed_time` パラメーターで指定された期間にわたって `speed_limit` パラメーターで指定された下限値を下回った場合、リクエストは中断されます。 |
connect_timeout | 接続を確立するためのタイムアウト期間。単位:秒。デフォルト値:10。 |
dns_cache_timeout | DNS キャッシュのタイムアウト期間。単位:秒。デフォルト値:60。 |
max_memory_size | データのダウンロード時にメモリに書き込むことができるデータの最大サイズ。単位:バイト。デフォルトでは、データのダウンロード時にメモリに書き込むことができるデータの最大サイズは 1 GB です。 |
enable_crc | CRC-64 を有効にするかどうかを指定します。有効な値は次のとおりです。
|
verify_ssl | SSL ベースの認証を有効にするかどうかを指定します。有効な値は次のとおりです。
|
ca_path | CA 証明書のルートパス。このパラメーターは、`verify_ssl` が 1 に設定されている場合に有効です。デフォルトでは、このパラメーターは空のままです。 |
ca_file | CA 証明書のパス。このパラメーターは、`verify_ssl` が 1 に設定されている場合に有効です。デフォルトでは、このパラメーターは空のままです。 |
proxy_host | プロキシサーバーのアドレスを |
proxy_auth | プロキシサーバーの認証情報を |
設定例
タイムアウト期間の指定
次のサンプルコードは、タイムアウト期間を指定する例です。
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t を初期化します。*/
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* CNAME を使用するかどうかを指定します。値 0 は CNAME を使用しないことを示します。*/
options->config->is_cname = 0;
/* ネットワークパラメーターを指定します。この関数の 2 番目のパラメーターは ctl の所有権を指定します。デフォルトでは、2 番目のパラメーターの値は 0 です。*/
options->ctl = aos_http_controller_create(options->pool, 0);
/* 接続を確立するためのタイムアウト期間を指定します。デフォルト値:10。単位:秒。*/
options->ctl->options->connect_timeout = 10;
/* DNS キャッシュのタイムアウト期間を指定します。デフォルト値:60。単位:秒。*/
options->ctl->options->dns_cache_timeout = 60;
/*
タイムアウト期間を指定します。
speed_limit パラメーターを設定して、平均速度の下限を指定します。デフォルト値:1024 (1 KB/s)。
speed_time パラメーターを設定して、平均速度が下限速度を下回ることが許容される最大時間を指定します。デフォルト値:15。単位:秒。
次の行は、転送速度が 15 秒間連続して 1 KB/s 未満の場合にリクエストタイムアウトが発生することを指定します:
*/
options->ctl->options->speed_limit = 1024;
options->ctl->options->speed_time = 15;
}
int main() {
aos_pool_t *p;
oss_request_options_t *options;
/* グローバル変数を初期化します。プログラムのライフサイクル中にグローバル変数を初期化する必要があるのは 1 回だけです。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return -1;
}
/* メモリプールとオプションを初期化します。*/
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
/* ロジックコード。この例では、ロジックコードは省略されています。*/
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
aos_pool_destroy(p);
/* 割り当てられたグローバルリソースを解放します。プログラムのライフサイクル中にグローバルリソースを解放する必要があるのは 1 回だけです。*/
aos_http_io_deinitialize();
return 0;
}SSL ベースの認証の設定
デフォルトでは、OSS C SDK 3.9.2 以降で SSL ベースの認証が有効になっています。SSL ベースの認証が失敗した場合は、SSL 証明書のパスが正しいかどうかを確認するか、SSL ベースの認証を無効にしてください。
次のサンプルコードは、SSL ベースの認証を設定する例です。
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t を初期化します。*/
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* CNAME を使用するかどうかを指定します。値 0 は CNAME を使用しないことを示します。*/
options->config->is_cname = 0;
/* ネットワークパラメーターを指定します。この関数の 2 番目のパラメーターは ctl の所有権を指定します。デフォルトでは、2 番目のパラメーターの値は 0 です。*/
options->ctl = aos_http_controller_create(options->pool, 0);
/* SSL ベースの認証を設定します。*/
/* verify_ssl パラメーターを設定して、SSL ベースの認証を有効にするかどうかを指定します。有効な値は 0 と 1 です。デフォルト値:1。値 1 は、SSL ベースの認証が有効であることを指定します。
ca_path パラメーターを設定して、CA 証明書のルートパスを指定します。このパラメーターは、verify_ssl が 1 に設定されている場合に有効です。デフォルトでは、このパラメーターは空のままです。
ca_file パラメーターを設定して、CA 証明書のパスを指定します。このパラメーターは、verify_ssl が 1 に設定されている場合に有効です。デフォルトでは、このパラメーターは空のままです。*/
/* SSL ベースの認証を有効にし、CA 証明書のパスを指定します。*/
//options->ctl->options->verify_ssl = 1;
//options->ctl->options->ca_path = "/etc/ssl/certs/";
//options->ctl->options->ca_file = "/etc/ssl/certs/ca-certificates.crt";
/* SSL ベースの認証を無効にします。*/
//options->ctl->options->verify_ssl = 0;
}
int main() {
aos_pool_t *p;
oss_request_options_t *options;
/* グローバル変数を初期化します。プログラムのライフサイクル中にグローバル変数を初期化する必要があるのは 1 回だけです。*/
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return -1;
}
/* メモリプールとオプションを初期化します。*/
aos_pool_create(&p, NULL);
options = oss_request_options_create(p);
init_options(options);
/* ロジックコード。この例では、ロジックコードは省略されています。*/
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
aos_pool_destroy(p);
/* 割り当てられたグローバルリソースを解放します。プログラムのライフサイクル中にグローバルリソースを解放する必要があるのは 1 回だけです。*/
aos_http_io_deinitialize();
return 0;
}