1[English](./README.md) | 简体中文 2 3<p align="center"> 4<a href="https://www.alibabacloud.com"><img src="https://aliyunsdk-pages.alicdn.com/icons/Aliyun.svg"></a> 5</p> 6 7<h1 align="center">Alibaba Cloud SDK for C++</h1> 8 9<p align="center"> 10<a href="https://travis-ci.org/aliyun/aliyun-openapi-cpp-sdk"><img src="https://travis-ci.org/aliyun/aliyun-openapi-cpp-sdk.svg?branch=master" alt="Travis Build Status"></a> 11<a href="https://codecov.io/gh/aliyun/aliyun-openapi-cpp-sdk"><img src="https://codecov.io/gh/aliyun/aliyun-openapi-cpp-sdk/branch/master/graph/badge.svg" alt="codecov"></a> 12</p> 13 14Alibaba Cloud SDK for C++ 让您不用复杂编程即可访问云服务器、负载均衡、云监控等阿里云服务。这里向您介绍如何获取 Alibaba Cloud SDK for C++ 并开始调用。 15 16如果您在使用的过程中遇到任何问题,欢迎前往[阿里云SDK问答社区](https://yq.aliyun.com/tags/type_ask-tagid_23350)提问,提问前请阅读[提问引导](https://help.aliyun.com/document_detail/93957.html)。亦可在当前 GitHub [提交 Issues](https://github.com/aliyun/aliyun-openapi-cpp-sdk/issues/new)。 17 18## 使用诊断 19[Troubleshoot](https://troubleshoot.api.aliyun.com/?source=github_sdk) 提供 OpenAPI 使用诊断服务,通过 `RequestID` 或 `报错信息` ,帮助开发者快速定位,为开发者提供解决方案。 20 21## 环境要求 22 23在使用 Alibaba Cloud SDK for C++ 前,确保您已经: 24 25* 注册了阿里云账号并获取了访问密钥(AccessKey)。 26 27> **说明:** 为了保证您的账号安全,建议您使用RAM账号来访问阿里云服务。阿里云账号对拥有的资源有全部权限。RAM账号由阿里云账号授权创建,仅有对特定资源限定的操作权限。详情[参见RAM](https://help.aliyun.com/document_detail/28647.html)。 28 29* 开通了云产品服务。有些云产品如对象存储(OSS)需要先在[阿里云控制台](https://home.console.aliyun.com)开通服务。 30 31* 安装支持 C++ 11 或更高版本的编译器: 32 * Windows: Visual Studio 2015 或以上版本 33 * Linux: GCC 4.9 或以上版本 34 35* 安装 CMake 3.0 或以上版本 36* 建议 4G 或以上内存 37 38## 安装 (从源代码构建) 39 40### Linux 41 421. 要在 Linux 平台进行编译, 您必须安装依赖的外部库文件 libcurl、libopenssl、libuuid、libjsoncpp, 通常情况下,系统的包管理器中的会有提供。 43 44* 例如:在基于 Redhat / Fedora 的系统上安装这些软件包 45 46```bash 47# use yum 48yum install jsoncpp-devel openssl-devel uuid-devel libcurl-devel 49 50# use dnf 51sudo dnf install libcurl-devel openssl-devel libuuid-devel libjsoncpp-devel 52``` 53 54* 在基于 Debian/Ubuntu 的系统 55 56```bash 57sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev libjsoncpp-dev 58``` 59 602. 执行以下命令,从 Github 克隆源码 61 62```bash 63git clone https://github.com/aliyun/aliyun-openapi-cpp-sdk.git 64``` 65 663. 编译安装 67 68* 手动编译安装 69 70```bash 71cd aliyun-openapi-cpp-sdk 72mkdir sdk_build 73cd sdk_build 74cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .. 75make 76sudo make install 77``` 78 79* 或者通过 `easyinstall.sh`一键式安装 80 81```bash 82cd aliyun-openapi-cpp-sdk 83sudo sh easyinstall.sh <lower name of product (like 'ecs')> 84 85# example 86sudo sh easyinstall.sh core 87sudo sh easyinstall.sh ecs 88``` 89 90**Alibaba Cloud SDK for C++ 将被安装在 `/usr` .** 91 92### Windows 93 941. 安装 [perl](https://www.perl.org/get.html#win32) 95 962. 使用 git-bash 执行以下命令,从 Github 克隆源码 97 98 ```bash 99 git clone https://github.com/aliyun/aliyun-openapi-cpp-sdk.git 100 ``` 101 1023. 使用 Visual Studio 进行编译: 103 104* 在 aliyun-openapi-cpp-sdk 下创建 `sdk_build` 目录 105* 打开 cmake-gui , 然后进行以下操作 106 * 选择 `Browse Source` 为 `源代码目录(aliyun-openapi-cpp-sdk)` 107 * 选择 `Browse build` 为 `构建目录(sdk_build)` 108 * 点击 `configure` 109 * 使用小写的产品名称,设置 `BUILD_PRODUCT` 参数的值 110 * 点击 `generate`, 构建 VS 解决方案。 111 1124. 编译安装 C++ SDK 113 114* 进入 sdk_build 目录,使用 Visual Studio 打开 alibabacloud-sdk.sln 解决方案 115* 选择构建 `Release` 输出 116* 并打开配置管理器勾选 `INSTALL` 117* 构建 -> 生成解决方案 118 119**Alibaba Cloud SDK for C++ 将安装在 `C:\Program File (x86)\alibabacloud-sdk` 目录** 120 121**注意:请以管理员身份运行 Visual Studio 和 cmake-gui,否则无法安装 SDK** 122 123--- 124 125## 快速使用 126 127在调用 Alibaba Cloud SDK for C++ 时,您首先需要配置预处理器定义 ALIBABACLOUD_SHARED 以引用阿里云 C++ SDK 的共享库,然后通过创建 Client 实例提供身份验证,并指定云服务的地域,然后发送API请求。 128 129以下代码展示了如何调用 DescribeInstancesAPI 查询指定地域所有 ECS 实例的详细信息。 130 131> **说明:** 您需要替换示例中的 your-region-id、your-access-key-id 和 your-access-key-secret 的值。 132 133```cpp 134#include <iostream> 135#include <alibabacloud/core/AlibabaCloud.h> 136#include <alibabacloud/ecs/EcsClient.h> 137 138using namespace AlibabaCloud; 139using namespace AlibabaCloud::Ecs; 140 141int main(int argc, char** argv) { 142 // 初始化 SDK 143 AlibabaCloud::InitializeSdk(); 144 145 // 配置 ecs 实例 146 ClientConfiguration configuration("<your-region-id>"); 147 EcsClient client("<your-access-key-id>", "<your-access-key-secret>", configuration); 148 149 // 创建API请求并设置参数 150 Model::DescribeInstancesRequest request; 151 request.setPageSize(10); 152 153 auto outcome = client.describeInstances(request); 154 if (!outcome.isSuccess()) { 155 // 异常处理 156 std::cout << outcome.error().errorCode() << std::endl; 157 AlibabaCloud::ShutdownSdk(); 158 return -1; 159 } 160 161 std::cout << "totalCount: " << outcome.result().getTotalCount() << std::endl; 162 163 // 关闭 SDK 164 AlibabaCloud::ShutdownSdk(); 165 return 0; 166} 167``` 168 169复制上述文件到 ecs_test.cc。 170 171Linux 下 172 173```bash 174~$ g++ -o ecstest ecs_test.cc --std=c++11 -lalibabacloud-sdk-core -l alibabacloud-sdk-ecs 175~$ ./ecstest 176# 结果或错误返回将在此展示 177~$ 178``` 179 180## Timeout 设置 181 182CPP SDK 使用 libcurl 作为底层 HTTP 传输库。 183 184* 下面两个参数用来传递超时参数到 libcurl。 185 * `connectTimeout`: 连接超时设置。 [参考](https://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT_MS.html). 186 * `readTimeout`: 传输超时设置。[参考](https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT_MS.html) 187 188* 默认值 189 * connectTimeout: 5000ms 190 * readTimeout: 10000ms 191 192* 可以在创建 Client 或者发 Requst 设置超时参数。 193 194* Requst 设置优先级高于 Client 设置。 195 196* 输入 0 或者 -1 到 `setConnectTimeout` 和 `setReadTimeout` 可以禁用此功能。 197 198下面代码是设置超时参数的例子,由于 Request 优先级高于 Client,所以最终 `ConnectTimeout` 为 `1000ms`, `readTimeout` 为 `6000ms`。 199 200```cpp 201#include <iostream> 202#include <alibabacloud/core/AlibabaCloud.h> 203#include <alibabacloud/ecs/EcsClient.h> 204 205using namespace AlibabaCloud; 206using namespace AlibabaCloud::Ecs; 207 208int main(int argc, char** argv) { 209 // Initialize the SDK 210 AlibabaCloud::InitializeSdk(); 211 212 // Configure the ECS instance 213 ClientConfiguration configuration("<your-region-id>"); 214 // specify timeout when create client. 215 configuration.setConnectTimeout(1500); 216 configuration.setReadTimeout(4000); 217 218 EcsClient client("<your-access-key-id>", "<your-access-key-secret>", configuration); 219 220 // Create an API request and set parameters 221 Model::DescribeInstancesRequest request; 222 request.setPageSize(10); 223 // specify timeout when request 224 request.setConnectTimeout(1000); 225 request.setReadTimeout(6000); 226 227 auto outcome = client.describeInstances(request); 228 if (!outcome.isSuccess()) { 229 // Handle exceptions 230 std::cout << outcome.error().errorCode() << std::endl; 231 AlibabaCloud::ShutdownSdk(); 232 return -1; 233 } 234 235 std::cout << "totalCount: " << outcome.result().getTotalCount() << std::endl; 236 237 // Close the SDK 238 AlibabaCloud::ShutdownSdk(); 239 return 0; 240} 241 242``` 243 244--- 245 246**更多 [例程](https://github.com/aliyun/aliyun-openapi-cpp-sdk/tree/master/examples)** 247 248**参考ucloud_ai组件调用alicloud AI API接口及example用法** 249 250## 问题 251 252[提交 Issue](https://github.com/aliyun/aliyun-openapi-cpp-sdk/issues/new/choose), 不符合指南的问题可能会立即关闭。 253 254## 发行说明 255 256每个版本的详细更改记录在[发行说明](CHANGELOG)中。 257 258## 贡献 259 260提交 Pull Request 之前请阅读[贡献指南](CONTRIBUTING.md)。 261 262## 许可证 263 264[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) 265 266版权所有 1999-2019 阿里巴巴集团 267