C与C++常用于嵌入式网关上的守护进程、设备管理程序。这类程序运行在边缘设备上,需要在本地异常时主动外发告警。用C/C++接入互亿无线预警通知接口,通常借助libcurl发起HTTPS POST请求。本文给出实现方案。 C/C++接入的接口…
C与C++常用于嵌入式网关上的守护进程、设备管理程序。这类程序运行在边缘设备上,需要在本地异常时主动外发告警。用C/C++接入互亿无线预警通知接口,通常借助libcurl发起HTTPS POST请求。本文给出实现方案。
C/C++接入的接口与参数
短信接口 https://api.ihuyi.com/sms/Submit.json ,语音接口 https://api.ihuyi.com/voice/vm 。表单参数account、password、mobile、content。
- account=APIID,password=APIKEY;
- mobile=接收手机号;
- content=通知内容,需做URL编码;
- 返回JSON中code=2为提交成功。
libcurl发送告警示例(C)
设备端需先安装libcurl开发库。下面示例构造表单并POST:
#include <curl/curl.h>
int send_sms(const char *mobile, const char *content) {
CURL *curl = curl_easy_init();
char post[1024];
snprintf(post, sizeof(post),
"account=%s&password=%s&mobile=%s&content=%s",
"APIID", "APIKEY", mobile, content);
curl_easy_setopt(curl, CURLOPT_URL,
"https://api.ihuyi.com/sms/Submit.json");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L);
int ok = curl_easy_perform(curl) == CURLE_OK;
curl_easy_cleanup(curl);
return ok; // 再解析返回JSON判断code
}
content含中文时,建议用curl_easy_escape做URL编码,避免表单解析错误。
C/C++接入注意事项
- 边缘设备要确保系统时间正确,否则HTTPS证书校验可能失败;
- libcurl要支持HTTPS与TLS12,编译时链接ssl与crypto;
- 密钥不要硬编码在固件里,建议从配置文件读取;
- 发送失败要做本地日志与重试,避免网络抖动丢告警。
基于libcurl的完整示例
C/C++环境通常用libcurl发送HTTPS请求。下面这个示例演示POST表单提交与返回读取,适合嵌入运维守护进程:
#include <curl/curl.h>
int send_sms(void) {
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://api.ihuyi.com/sms/Submit.json");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,
"account=你的APIID&password=你的APIKEY"
"&mobile=13800138000&content=磁盘使用率超过阈值,请清理");
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) fprintf(stderr, "%s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
return res; // code=2表示提交成功
}
依赖与编译说明
示例依赖libcurl,Linux下安装libcurl-devel后用gcc编译:gcc notify.c -o notify -lcurl。中文content拼接表单串时需做URL编码,建议配合curl_easy_escape处理。
常见报错排查
- CURLE_COULDNT_RESOLVE_HOST:检查DNS与出网;
- CURLE_SSL_CACERT:确认系统CA证书包已安装;
- 返回体里code非2:解析返回JSON,按msg定位;
- 语音通道:URL换成 https://api.ihuyi.com/voice/vm 。
设备端通过libcurl即可把异常外发。前往注册免费试用获取密钥。