You need to enable JavaScript to run this app.
导航
C++ 安装和初始化
最近更新时间:2025.04.23 16:51:49首次发布时间:2025.04.23 16:51:49
我的收藏
有用
有用
无用
无用

本文为您介绍大模型应用防火墙 C++ SDK 的安装方式和初始化配置。

前提条件

环境要求

安装 gcc 或其他 C 语言编译器。执行gcc --version可以检查当前 gcc 的版本信息。

步骤一 下载依赖库

代码示例中使用了libcurljson-copenssl 等依赖库,您需要安装这些库及其开发包。以Debian/Ubuntu 系统为例,您可以使用如下命令安装:

libcurl用于发起 HTTP 请求,安装命令如下:

sudo apt install libcurl4-openssl-dev

步骤二 生成静态库

为确保兼容性,您需要根据目标运行环境编译静态库。

  1. 获取头文件和源文件。

    头文件api_request.h的具体内容如下:

    #ifndef API_REQUEST_H
    #define API_REQUEST_H
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <curl/curl.h>
    #include <json-c/json.h>
    #include <openssl/sha.h>
    #include <openssl/hmac.h>
    
    #define MAX_LEN 40960
    #define DATE_FORMAT "%Y%m%dT%H%M%SZ"
    
    // 定义常量,实际使用时请替换为真实值
    extern const char *AccessKeyID;
    extern const char *SecretAccessKey;
    extern const char *Region;
    extern const char *Service;
    extern const char *Endpoint;
    extern const char *Action;
    extern const char *Version;
    extern const char *Content;
    
    // 回调函数,用于处理请求头
    size_t request_header_callback(void *ptr, size_t size, size_t nmemb, void *userdata);
    
    // 回调函数,用于处理请求体
    size_t request_body_callback(void *ptr, size_t size, size_t nmemb, void *userdata);
    
    // 回调函数,用于处理响应头
    size_t response_header_callback(void *ptr, size_t size, size_t nmemb, void *userdata);
    
    // 回调函数,用于处理响应体
    size_t response_body_callback(void *ptr, size_t size, size_t nmemb, void *userdata);
    
    // HMAC - SHA256计算
    unsigned char *hmacSHA256(const unsigned char *key, size_t key_len, const unsigned char *content, size_t content_len);
    
    // 获取签名密钥
    unsigned char *getSignedKey(const char *secretKey, const char *date, const char *region, const char *service);
    
    // SHA256哈希计算
    char *hashSHA256(const unsigned char *content, size_t len);
    
    // 构建规范字符串
    void buildCanonicalString(const char *method, const char *queryString, const char *host, const char *date, const char *payload, char *canonicalString);
    
    // 构建签名字符串
    void buildSignString(const char *date, const char *authDate, const char *hashedCanonicalString, char *signString);
    
    // 构建认证请求头
    void buildAuthorization(const char *authDate, const char *signString, char *authorization);
    
    // 构建请求体JSON字符串
    void buildCheckLLMPromptBody(const char *content, int contentType, const char *host, int msgClass, const char *region, char *requestBody);
    
    // 构建请求体JSON字符串
    void buildQueryLLMGenerateBody(const char *msgid, int useStream , char *requestBody);
    
    // 执行curl请求
    int performCurlRequest(CURL *curl, const char *url, const char *requestBody, struct curl_slist *headers);
    
    // 初始化curl相关设置
    CURL *initCurl();
    
    // 构建请求地址
    void buildRequestAddress(const char *endpoint, const char *queryString, char *requestAddr, size_t size);
    
    // 构建查询字符串
    void buildQueryString(const char *action, const char *version, char *queryString, size_t size);
    
    // 构建签名相关材料
    void buildSignatureMaterials(char *date, char *authDate, const char *requestBody, char *payload, size_t payloadSize);
    
    #endif    
    
  2. 使用以下命令编译成libapi_request.a静态库:

    gcc -c api_request.c -o api_request.o -lcurl -ljson-c -lssl -lcrypto
    ar rcs libapi_request.a api_request.o
    

步骤三 定义常量

以下为定义的常量:

const char *AccessKeyID = "Your AK";  // Access Key,用于身份验证
const char *SecretAccessKey = "Your SK";  // Secret Key,用于签名
const char *Region = "cn-beijing";  // 大模型应用防火墙所属地域对应的 ID
const char *Service = "waf";  // 大模型应用防火墙的服务名称,固定为 waf
const char *Endpoint = "open.volcengineapi.com"; // 大模型应用防火墙的 API 调用域名
const char *Action = "CheckLLMPrompt"; // API 名称
const char *Version = "2023-12-25"; // API 版本
const char *Content = "请输入您想要校验的内容,文本内容或资源URL";  // 需要检测的内容