すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for Cを使用した初期化

最終更新日:Jun 12, 2024

Object Storage Service (OSS) SDK for Cを使用する場合は、リクエストオプション (oss_request_options_t) を初期化し、エンドポイントを指定する必要があります。

リクエストオプションの初期化Initialize request options

V1署名アルゴリズムの使用

OSSエンドポイントを使用したリクエストオプションの初期化

次のサンプルコードは、OSSエンドポイントを使用してリクエストオプションを初期化する方法の例を示しています。

#include "oss_api.h"
# 「aos_http_io.h」を含める
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 * /
const char * endpoint = "yourEndpoint";

void init_options(oss_request_options_t * オプション)
{
    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();
    0を返します。} 

カスタムドメイン名を使用して要求オプションを初期化する

次のサンプルコードは、カスタムドメイン名を使用してリクエストオプションを初期化する方法の例を示しています。

#include "oss_api.h"
# 「aos_http_io.h」を含める
# カスタムドメイン名を指定します。 * /
const char * endpoint = "yourCustomEndpoint";

void init_options(oss_request_options_t * オプション) {
    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();
    0を返します。} 

STSが提供する一時的なアクセス資格情報を使用したリクエストオプションの初期化

次のサンプルコードは、Security Token Service (STS) から取得した一時的なアクセス資格情報を使用してリクエストオプションを初期化する方法の例を示しています。

#include "oss_api.h"
# 「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_KEYID");
const char * access_key_secret = getenv("YOUR_ACCESS_KEY_SECRET");
/* STSから取得するセキュリティトークンを指定します。 * /
const char * sts_token = "<yourSecurityToken>";
void init_options(oss_request_options_t * オプション)
{
    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();
    0を返します。} 

V4署名アルゴリズムの使用 (推奨)

V4署名アルゴリズムは、より良好なセキュリティを提供する。 V4署名アルゴリズムを使用する場合は、regionとsignatureVersionの2つのパラメーターを追加します。 aliyun-oss-c-sdk V3.11.0はV4署名アルゴリズムをサポートします。

次のサンプルコードは、OSSエンドポイントとV4署名アルゴリズムを使用してOSSClientインスタンスを作成する方法の例を示しています。 STSから取得したカスタムドメイン名またはアクセス資格情報を使用してOSSClientインスタンスを作成するには、次のサンプルコードを変更します。

#include "oss_api.h"
# 「aos_http_io.h」を含める
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 * /
const char * endpoint = "yourEndpoint";

void init_options(oss_request_options_t * オプション)
{
    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、エンドポイント);
    options->config->signature_version = 4;
    /* 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();
    0を返します。} 

パラメーター

共通パラメーターを次の表に示します。

パラメーター

説明

speed_limit

平均速度の下限。 単位: バイト /秒。 デフォルト値: 1024。

speed_time

速度が平均速度の下限未満の場合に許可される最大期間。 単位は秒です。 デフォルト値:15。

重要

speed_limitとspeed_timeの両方のパラメーターが必要です。 speed_timeパラメーターで指定された期間の間、平均速度がspeed_limitパラメーターで指定された下限未満の場合、リクエストは中断されます。

connect_timeout

接続を確立するためのタイムアウト期間。 単位は秒です。 デフォルト値は 10 です。

dns_cache_timeout

DNSキャッシュのタイムアウト期間。 単位は秒です。 デフォルト値: 0。

max_memory_size

データのダウンロード時にメモリに書き込むことができるデータの最大サイズ。 単位:バイト デフォルトでは、データのダウンロード時にメモリに書き込むことができるデータの最大サイズは1 GBです。

enable_crc

CRC-64を有効にするかどうかを指定します。 有効な値:

  • 0: CRC-64を無効にします。

  • 1 (デフォルト): CRC-64を有効にします。

verify_ssl

SSLベースの認証を有効にするかどうかを指定します。 有効な値:

  • 0: SSLベースの認証を無効にします。

  • 1 (デフォルト): SSLベースの認証を有効にします。

ca_path

CA証明書のルートパス。 このパラメーターは、verify_sslが1に設定されている場合に有効です。 デフォルトでは、このパラメータは空のままです。

ca_file

CA証明書のパス。 このパラメーターは、verify_sslが1に設定されている場合に有効です。 デフォルトでは、このパラメータは空のままです。

proxy_host

host:port形式のプロキシサーバーのアドレス。

proxy_auth

user:password形式のプロキシサーバーのパスワード。

設定例

タイムアウト期間の指定

次のサンプルコードは、タイムアウト期間を指定する方法の例を示しています。

#include "oss_api.h"
# 「aos_http_io.h」を含める
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 * /
const char * endpoint = "yourEndpoint";

void init_options(oss_request_options_t * オプション)
{
    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();
    0を返します。} 

SSLベースの認証の設定

デフォルトでは、SSLベースの認証はOSS SDK for C 3.9.2以降で有効になっています。 SSLベースの認証が失敗した場合は、SSL証明書のパスが正しいかどうかを確認するか、SSLベースの認証を無効にします。

次のサンプルコードは、SSLベースの認証を設定する方法の例を示しています。

#include "oss_api.h"
# 「aos_http_io.h」を含める
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 * /
const char * endpoint = "yourEndpoint";

void init_options(oss_request_options_t * オプション)
{
    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();
    0を返します。}