C语言API接口开发,腾讯云服务器 API C语言接口

腾讯云服务器的官方API和文档非常详尽,但是对于嵌入式设备还不是很友好,为了在项目中开发一个发送短信的功能,写了一个腾讯云服务器的客户端api,抽取了其中框架部分:

腾讯云服务器 API处理的流程:

1)初始化变量,主要有三类:1 密钥参数,2 构成请求头(http head)的参数,3 构成请求数据(http body)的参数

2)生成请求数据(http body),请求数据的参数和请求数据生成的函数都是私有自定义

3)生成签名的请求头(http head),头部参数和签名头部处理函数可以使用API提供的也可以参考API定义私有的

4)发送http post请求,并返回云服务器的响应数据

具体处理Demo:发送短信,参见mian.c:

{

// 密钥参数

const char* SECRET_ID = "AKID*******"; //cloud provider define

const char* SECRET_KEY = "oNg*******"; //cloud provider define

const char* testPhone2 = "+86133*******2"; //test value 2

const char* testVcode2 = "520520"; //test value 2

char *resp = NULL;

//1)new private parameter, private parameter are used by private callback func

struct defaultHeadParam *smsHead = smsHeadParamNew();

struct smsBodyParam *smsBody = smsBodyParamNew();

//2)new cloud api

struct cloudApi *smsApi = cloudApiNew();

if(!smsHead || !smsBody || !smsApi) return ERR_NOMEM;

//3)set cloud api id and key

cloudApiSecretSet(smsApi, SECRET_ID, SECRET_KEY);

//4)set private parameter and callback func

cloudApiHttpBodyInit(smsApi, smsBody, smsHttpBody);

cloudApiHttpHeadInit(smsApi, smsHead, defaultHttpSignatureHead);

//5)http post and return reply

resp = cloudApiHttpPost(smsApi);

//6)use reply value, do not need free it in you code

//just a demo, you can use cjson to handle resp here

if(resp){

printf("%s\n", "resp1-----------------------");

printf("%s\n\n", resp);

}

//for test 2

//7)renew http body parameter demo(your private define if needed)

smsBodyPhoneVcodeRenew(smsBody, testPhone2, testVcode2);

//8)http post and return reply

resp = cloudApiHttpPost(smsApi);

if(resp){

printf("%s\n", "resp2-----------------------");

printf("%s\n\n", resp);

}

//9)release

smsHeadParamFree(smsHead);

smsBodyParamFree(smsBody);

cloudApiFree(smsApi);

return ERR_SUCCESS;

}

注意:

1)私有定义的数据的内存分配,API代码不做资源维护处理,由你自己的代码处理:

struct defaultHeadParam *smsHead = smsHeadParamNew();

struct smsBodyParam *smsBody = smsBodyParamNew();

smsHeadParamFree(smsHead);

smsBodyParamFree(smsBody);

2)cloudapi数据的内存分配,由API维护,外部仅使用即可,在程序结束时显式调用:

cloudApiFree(smsApi);

3)对外部库的要求:

选项注意:

1,--enable-ares dns解析使用异步库,避免网络异常curl_easy_perform超时,socket泄漏,参考:

2,当在你的主程序中使用了openssl时,在curl如果也选用openssl库会出现异常,因此编译curl库建议选用其选项中的:

PolarSSL

3,可能因为实际需要,你还需要集成cjson库(序列化和反序列化http body),libiconv:将http body转成utf-8

4)最常见的错误:

{"Response":{"Error":{"Code":"AuthFailure.SignatureFailure","Message":"The provided credentials could not be validated. Please check your signature is correct."},"RequestId":"9ee538f4-1814-458a-a811-22ac0269dacd"}}

可以使用腾讯云提供的“签名串生成”功能(登录你的云账号腾讯云提供了该调试功能)进行调试,对比网页生成的数据和代码打印的数据,找到不一致的地方进行修改

因腾讯云API的一致性设计较好,该 API 框架应该可以适用于其他腾讯云服务接口,希望能给有需要的人提供帮助,同时希望能够得到使用者的优化和改进。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值