日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

HTTPS接入使用示例

本文以C Link SDK中的Demo文件./demos/http_basic_demo為例,介紹如何調用Link SDK的API,將HTTPS協議的設備接入物聯網平臺并進行消息收發。

背景信息

HTTPS接入的更多信息,請參見概述

步驟一:初始化

配置底層依賴和日志輸出。aiot_http_init,創建客戶端實例,并初始化默認參數。

 /* 配置SDK的底層依賴 */
    aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
    /* 配置SDK的日志輸出 */
    aiot_state_set_logcb(demo_state_logcb);
    ...
    ...
    /* 創建1個HTTPS客戶端實例并內部初始化默認參數 */
    http_handle = aiot_http_init();

步驟二:配置功能

調用aiot_http_setopt,配置以下功能。

  1. 配置連接參數

  2. 配置事件回調

更多功能的配置項,請參見aiot_http_option_t

  1. 配置連接參數

    • 示例代碼:

          char       *http_host = "iot-as-http.cn-shanghai.aliyuncs.com";
          …
          aiot_sysdep_network_cred_t cred;
          char *product_key       = "a18wP******";
          char *device_name       = "LightSwitch";
          char *device_secret     = "uwMTmVAMnGGHaAkqmeDY6cHxxB******";
          …
          …
          /* 配置HTTPS服務器域名。 */
          aiot_http_setopt(http_handle, AIOT_HTTPOPT_HOST, (void *)host);
          /* 配置服務器端口。 */
          aiot_http_setopt(http_handle, AIOT_HTTPOPT_PORT, (void *)&port);
          /* 配置設備安全憑證。 */
          aiot_http_setopt(http_handle, AIOT_HTTPOPT_NETWORK_CRED, &cred);
          /* 配置設備ProductKey。 */
          aiot_http_setopt(http_handle, AIOT_HTTPOPT_PRODUCT_KEY, product_key);
          /* 配置設備DeviceName。 */
          aiot_http_setopt(http_handle, AIOT_HTTPOPT_DEVICE_NAME, device_name);
          /* 配置設備DeviceSecret。 */
          aiot_http_setopt(http_handle, AIOT_HTTPOPT_DEVICE_SECRET, device_secret);
                                      
    • 相關參數:

      參數

      示例

      說明

      http_host

      iot-06z00ax1o******.http.iothub.aliyuncs.com

      設備的接入域名。

      • 企業版實例和新版公共實例:在實例詳情頁面的開發配置面板,查看接入域名。

      • 舊版公共實例:接入域名格式為https://iot-as-http.${YourRegionId}.aliyuncs.com

      新舊版公共實例和企業版實例、以及接入域名的更多信息,請參見查看實例終端節點

      product_key

      a18wP******

      設備認證信息。更多信息,請參見獲取設備認證信息

      本例程的身份認證方式為一機一密。

      device_name

      LightSwitch

      device_secret

      uwMTmVAMnGGHaAkqmeDY6cHxxB******

  2. 配置狀態監控

    1. 配置狀態監控的回調函數。

      • 示例代碼:

            int main(int argc, char *argv[])
        {
            ...
            ...
            /* 配置數據到達時, SDK應調用的用戶回調函數 */
            aiot_http_setopt(http_handle, AIOT_HTTPOPT_RECV_HANDLER, demo_http_recv_handler);
            /* 配置內部狀態變化時, SDK應調用的用戶回調函數 */
            aiot_http_setopt(http_handle, AIOT_HTTPOPT_EVENT_HANDLER, demo_http_event_handler);
        }
      • 相關參數:

        配置項

        示例值

        說明

        AIOT_HTTPOPT_RECV_HANDLER

        demo_http_recv_handler

        當設備接收到應答報文后,觸發該函數,執行對應處理。

        AIOT_HTTPOPT_EVENT_HANDLER

        demo_http_event_handler

        當Token變化時,觸發該回調函數,以確保Token的有效性。

    2. 定義狀態監控回調函數。

      • 在Token變化時,觸發回調函數,設置執行操作。

        void demo_http_event_handler(void *handle, const aiot_http_event_t *event, void *user_data)
        {
            int32_t res;
            /* Token失效事件處理 */
            if (event->type == AIOT_HTTPEVT_TOKEN_INVALID) {
                printf("token invalid, invoke iot_http_auth to get new token\n");
                res = aiot_http_auth(handle);
                printf("aiot_http_auth in callback, res = -0x%04x\r\n", -res);
            }
        }
      • 在讀取到網絡報文時,觸發回調函數,執行設置的處理。示例僅做打印處理,您在編寫處理邏輯時,需考慮以下幾點。

        • 應答報文的參數說明,請參見HTTPS連接通信

        • 正常接收報文含AIOT_HTTPRECV_STATUS_CODE、AIOT_HTTPRECV_HEADER和 AIOT_HTTPRECV_BODY三個事件,分別表示:通信是否成功、報文的類型和報文的包體。

        • 根據業務需要,處理狀態碼。狀態碼的更多信息,請參見HTTP狀態碼

        void demo_http_recv_handler(void *handle, const aiot_http_recv_t *packet, void *userdata)
        {
            switch (packet->type) {
                case AIOT_HTTPRECV_STATUS_CODE: {
                    /* TODO: 以下代碼如果不被注釋, SDK收到HTTPS報文時, 會通過這個用戶回調打印HTTPS狀態碼, 如404, 200, 302等。 */
                    /* printf("status code: %d\n", packet->data.status_code.code); */
                }
                break;
                case AIOT_HTTPRECV_HEADER: {
                    /* TODO: 以下代碼如果不被注釋, SDK收到HTTPS報文時, 會通過該回調打印HTTPS首部, 如Content-Length等。 */
                    /* printf("key: %s, value: %s\n", packet->data.header.key, packet->data.header.value); */
                }
                break;
                /* TODO: 如果需要處理物聯網平臺的HTTPS回應報文, 在此處修改。當前示例僅打印回應。 */
                case AIOT_HTTPRECV_BODY: {
                    printf("%.*s\r\n", packet->data.body.len, packet->data.body.buffer);
                }
                break;
                default: {
                }
                break;
            }
        }

步驟三:請求連接

調用aiot_http_auth,根據配置連接的參數,向指定的物聯網平臺HTTPS服務器,發送身份認證請求,獲取Token。

/* 設備認證, 獲取Token */
    res = aiot_http_auth(http_handle);
    if (res == 0) {
        printf("aiot_http_auth succeed\r\n");
    } else {
        /* 如果認證失敗, 就銷毀實例, 回收資源, 退出程序 */
        printf("aiot_http_auth failed, res = -0x%04x\r\n", -res);
        aiot_http_deinit(&http_handle);
        return -1;
    }

步驟四:發送消息

調用aiot_http_send,在demo_http_post_lightswitch中,向指定Topic發送消息。

說明
  • 例程僅打印發送的消息。實際業務中,您需自定義函數demo_http_post_lightswitch

  • 您需刪除例程中代碼兩邊的注釋符號,以演示設備向物聯網平臺上報消息。

  • 示例代碼:

    int32_t demo_http_post_lightswitch(void *handle)
    {
        char data[] = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}";
        int32_t res;
        res = aiot_http_send(handle,
                             "/a1wAf******/LightSwitch/user/update",
                             (uint8_t *)data,
                             strlen(data));
        if (res < 0) {
            printf("aiot_http_send res = -0x%04X\r\n", -res);
            return res;
        }
        …
        …
    }
  • 相關參數:

    參數

    示例

    說明

    data[]

    {\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}

    上報至物聯網平臺的消息內容。

    由于示例消息的Topic類型為自定義,因此數據格式可自定義。

    topic

    /a1wAf******/LightSwitch/user/update

    擁有發布權限的Topic。其中:

    • a18wP******為設備的ProductKey。

    • LightSwitch為設備的DeviceName。

    設備通過該Topic向物聯網平臺發送消息。

步驟五:接收應答

消息發送后,物聯網平臺返回應答報文。設備端調用aiot_http_recv接收HTTPS應答數據,根據事件回調函數,執行對應處理。

    res = aiot_http_recv(handle);
    if (res >= 0) {
        /* 成功接收到服務器應答, 且業務應答碼為0, 說明數據上報成功 */
        return 0;
    } else {
        printf("aiot_http_recv res = -0x%04X\r\n", -res);
        return -1;
    }
}

步驟六:退出程序

調用aiot_http_deinit,銷毀HTTPS客戶端實例,釋放資源。

    aiot_http_deinit(&http_handle);
    printf("program exit as normal return\r\n");
    printf("\r\n");
    return 0;

后續步驟

  • 例程文件配置完成后,需進行編譯,生成可執行文件./output/http-basic-demo

    更多信息,請參見編譯與運行

  • 關于運行結果的詳細說明,請參見運行日志