雅讯SDK 怎么确认测试的每个http方法是否成功

代码

cpp 复制代码
BOOLEAN s_test_finish = FALSE;                      /**< 标记http流程结束 */
BOOLEAN s_retry = FALSE;                            /**< 用于判断是否需要重试 */

static void http_callback(ADP_HTTP_CALLBACK_EVENT_E event, INT8U *pack, INT32U pack_len, ADP_HTTP_TRANS_PROGRESS_T progress)
{
    switch (event) {
        case ADP_HTTP_CB_EVENT_ERROR:
            APP_LOGD("ADP_HTTP_CB_EVENT_ERROR...");
            s_retry = TRUE;
            s_test_finish = TRUE;
            break;
        case ADP_HTTP_CB_EVENT_RSP_HEADER:
            APP_LOGD("ADP_HTTP_CB_EVENT_RSP_HEADER...");
            APP_LOGD("pack_len:[%d]",pack_len);
            http_print(pack, strlen((char *)pack));
            break;
        case ADP_HTTP_CB_EVENT_RSP_CONTENT:
            APP_LOGD("ADP_HTTP_CB_EVENT_RSP_CONTENT...");
            APP_LOGD("pack_len:[%d]", pack_len);
            http_print(pack, strlen((char *)pack));
            APP_LOGD("progress: [%d / %d]", progress.dlen, progress.dtotal);
            break;
        case ADP_HTTP_CB_EVENT_RSP_END:
            APP_LOGD("ADP_HTTP_CB_EVENT_RSP_END...");
            APP_LOGD("pack_len:[%d]", pack_len);
            http_print(pack, strlen((char *)pack));
            APP_LOGD("progress: [%d / %d]", progress.dlen, progress.dtotal);
            s_test_finish = TRUE;
            break;
        case ADP_HTTP_CB_EVENT_DOWNLOAD_PROGRESS:
            APP_LOGD("HTTP_CB_EVENT_DOWNLOAD_PROGRESS...");
            APP_LOGD("pack_len:[%d]", pack_len);
            http_print(pack, strlen((char *)pack));
            APP_LOGD("progress: [%d / %d]", progress.dlen, progress.dtotal);
            break;
        case ADP_HTTP_CB_EVENT_DOWNLOAD_END:
            APP_LOGD("ADP_HTTP_CB_EVENT_DOWNLOAD_END...");
            APP_LOGD("pack_len:[%d]", pack_len);
            http_print(pack, strlen((char *)pack));
            APP_LOGD("progress: [%d / %d]", progress.dlen, progress.dtotal);
            s_test_finish = TRUE;
            break;
        default:
            APP_LOGD("default...");
            break;
    }
}


/**
 * @brief HTTPS GET测试函数
 * @param [in] url 
 */
INT32S https_test_get(const char *url)
{
    INT32S ret;

    ADP_HTTP_CLI_CONFIG_T cli_cfg = {
        .request_type     = ADP_HTTP_CLIENT_REQUEST_GET,
        .url              = (INT8U *)url,
        .headers          = NULL,
        .headers_len      = 0,
        .down_file_path   = NULL,
        .post_file_path   = NULL,
        .postdata         = NULL,
        .postdata_len     = 0,
        .connect_timeout  = 60,
        .response_timeout = 60
    };

    ADP_HTTP_SSL_CONFIG_T ssl_cfg = {
        .verify_level    = ADP_HTTP_SSL_VERIFY_SERVER,      /**< 单向认证 */
        .ssl_contxtid    = ADP_GPRS_PDP_COM_0,              /**< 使用GPRS拨号的索引 */
        .root_crt_path   = (INT8U *)CLIENT_CA_YAXON_PATH,   /**< 使用CA证书路径 */
        .client_key_path = NULL,
        .client_crt_path = NULL,
        .root_crt = NULL,                                   /**< 当前不支持内存传递秘钥 */
        .client_crt = NULL,
        .client_key = NULL
    };

    ADP_HTTP_CLIENT_T *http_handle;
    ADP_HTTP_CALLBACK_T cb = {
        .http_callback = http_callback,
    };

    http_title_printf("HTTPS GET Test Start.");

    http_dump_ca_file(CLIENT_CA_YAXON_PATH);

	

    http_handle = ADP_HTTP_Create();
    APP_LOGD("http_handle:%p", http_handle);

    ret = ADP_HTTP_SetCliCfg(http_handle, &cli_cfg);
    if (ret != ADP_HTTP_SUCCESS) {
        APP_LOGD("ADP_HTTP_SetCliCfg failed.");
        return -1;
    }
    ret = ADP_HTTP_SetSSLCfg(http_handle, &ssl_cfg);
    if (ret != ADP_HTTP_SUCCESS) {
        APP_LOGD("ADP_HTTP_SetCliCfg failed.");
        return -1;
    }

    ret = ADP_HTTP_Request(http_handle, cb);
    if (ret != ADP_HTTP_SUCCESS) {
        APP_LOGD("ADP_HTTP_SetCliCfg failed.");
        return -1;
    }
    http_title_printf("HTTPS GET Test End.");
    return 0;
}

问题

像这样的接口是阻塞的还是非阻塞的,比如ADP_HTTP_Request,怎么确认测试的每个http方法是否成功

回答

ADP_HTTP_Request 是非阻塞的:函数返回仅表示"请求已成功发起"。

是否真正成功,要看回调事件:

成功:收到 ADP_HTTP_CB_EVENT_RSP_END / ADP_HTTP_CB_EVENT_DOWNLOAD_END,并且 progress.resp_code 为 200(或业务期望码)。

失败:收到 ADP_HTTP_CB_EVENT_ERROR。

一旦收到 ADP_HTTP_CB_EVENT_ERROR,就会把 s_test_finish 置为 TRUE,等待循环立即退出,流程结束

当前用 s_test_finish/s_retry 的机制就是等回调判定成功/失败。

相关推荐
碳基修炼6 小时前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
那年窗外下的雪.14 小时前
第 02 天:Linux 权限、inode、目录项与链接
学习·http
那年窗外下的雪.14 小时前
AIDC 学习日志|第 27 天|EVPN 多归属收敛时间线与 Leaf2 接管验证
网络协议·学习·http·tcpdump
j7~15 小时前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
布莱克6052 天前
HTTP 状态码详解:从分类到实战
计算机网络·http·状态码
StevenSurpass2 天前
打印业务彻底解耦:FastPrintAgent 统一 JSON 模型 + FastReport 引擎的设计与落地
mqtt·http·中间件·打印·fastreport
小此方3 天前
Linux网络(十二):HTTP短连接与长连接:从Connection机制到Cookie、Session,彻底理解HTTP的无状态
服务器·网络·http
江畔柳前堤4 天前
On-Policy Distillation 全景深潜
人工智能·网络协议·目标检测·http·机器学习·chatgpt·重构
157092511344 天前
Android进阶之光:HTTP协议原理深度解析
android·网络协议·http
cccc卌4 天前
HTTP协议总结
网络·网络协议·http