鸿蒙开发实战往期文章必看:

HarmonyOS NEXT应用开发性能实践总结

一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!

“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)

 “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路径!


使用fetchsync发送同步网络请求 (C/C++)

场景介绍

发送一个同步HTTP请求,也可以设置请求头和请求体等参数,并返回来自服务器的HTTP响应。常用于获取资源,支持通过拦截器来处理请求和响应。

接口说明

具体API说明详见接口文档

接口名

描述

Rcp_Response *HMS_Rcp_FetchSync(Rcp_Session *session, Rcp_Request *request, uint32_t *errCode);

发送一个HTTP请求,并直接返回来自服务器的HTTP响应。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <stdio.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建Request对象。"https://www.example.com"请根据实际情况替换为想要请求的URL地址。(实际使用时请将该代码块放入main函数或者其他函数区域内)。
    const char *kHttpServerAddress = "http://www.example.com";
    Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
  4. 创建会话。(实际使用时请将该代码块放入main函数或者其他函数区域内)。
    uint32_t errCode = 0;
    Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
  5. 发起请求,并处理返回结果。(实际使用时请将该代码块放入main函数或者其他函数区域内)。
    Rcp_Response *response = HMS_Rcp_FetchSync(session, request, &errCode);
    if (response != NULL) {
        printf("Response status: %d\n", response->statusCode);
    } else {
        printf("Fetch failed: errCode: %u\n", errCode);
    }
  6. 清理response响应和request请求。最后关闭session。(实际使用时请将该代码块放入main函数或者其他函数区域内)。
    // 清理request
    HMS_Rcp_DestroyRequest(request);
    // 处理response,并清理response
    if (response != NULL) {
        response->destroyResponse(response);
    }
    // 关闭session
    errCode = HMS_Rcp_CloseSession(&session);
    // 处理errCode

使用fetch发起异步网络请求 (C/C++)

场景介绍

发送一个异步HTTP请求,也可以设置请求头和请求体等参数,并返回来自服务器的HTTP响应。常用于获取资源,支持通过拦截器来处理请求和响应。

接口说明

具体API说明详见接口文档

接口名

描述

uint32_t HMS_Rcp_Fetch(Rcp_Session *session, Rcp_Request *request, const Rcp_ResponseCallbackObject *responseCallback);

发送一个HTTP请求,并返回来自服务器的HTTP响应。使用responseCallback异步回调。

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <stdio.h>
    #include <unistd.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建Request对象。"https://www.example.com"请根据实际情况替换为想要请求的URL地址。(完整见步骤5)
    const char *kHttpServerAddress = "http://www.example.com";
    Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
  4. 创建会话。(完整见步骤5)
    uint32_t errCode = 0;
    Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
  5. 发起请求,并处理返回结果。最后关闭session。
    bool g_callback = false;
    // 异步请求的响应处理回调,请用户自定义
    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode)
    {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        // 注意清理响应
        if (response != NULL) {
            response->destroyResponse(response);
        }
        g_callback = true;
    }
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com";
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        request->method = RCP_METHOD_GET;
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 处理errCode
        // 等待fetch结果
        int timeout = 100;
        while (timeout-- > 0 && !g_callback) {
            usleep(1000);
        }
        // 在退出前取消可能还在执行的requests
        errCode = HMS_Rcp_CancelSession(session);
        // 清理request
        HMS_Rcp_DestroyRequest(request);
        // 关闭session
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
        return 0;
    }

使用get发送网络请求 (C/C++)

场景介绍

发送一个带有默认HTTP参数的HTTP GET请求,并返回来自服务器的HTTP响应。使用异步回调。常用于从服务器获取数据。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <stdio.h>
    #include <unistd.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建会话,会话发起get请求。“http://www.example.com”请根据实际情况替换为想要请求的URL地址。等待响应返回后,销毁request并关闭session。
    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode)
    {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        // 注意清理响应
        if (response != NULL) {
            response->destroyResponse(response);
        }
    }
    bool g_callback = false;
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com";
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        request->method = RCP_METHOD_GET;
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 处理errCode
        // 等待fetch结果
        int timeout = 100;
        while (timeout-- > 0 && !g_callback) {
            usleep(1000);
        }
        // 在退出前取消可能还在执行的requests
        errCode = HMS_Rcp_CancelSession(session);
        // 清理request
        HMS_Rcp_DestroyRequest(request);
        // 关闭session
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
        return 0;
    }

使用post发送网络请求 (C/C++)

场景介绍

发送一个带有默认HTTP参数的HTTP POST请求,并返回来自服务器的HTTP响应。使用异步回调。常用于向服务器提交数据。与GET请求不同,POST请求将参数包含在请求主体中,适用于创建新资源、提交表单数据或执行某些操作。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <cstdlib>
    #include <cstring>
    #include <stdio.h>
    #include <unistd.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建会话,会话发起post请求。“http://www.example.com”请根据实际情况替换为想要请求的URL地址。等待响应返回后,销毁request并关闭session。
    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode)
    {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        // 注意清理响应
        if (response != NULL) {
            response->destroyResponse(response);
        }
    }
    bool g_callback = false;
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com";
        const char *content = "content";
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        // 设置request参数
        request->method = RCP_METHOD_POST;
        request->content = (Rcp_RequestContent *)calloc(1, sizeof(Rcp_RequestContent));
        request->content->type = RCP_CONTENT_TYPE_STRING;
        request->content->data.contentStr.buffer = content;
        request->content->data.contentStr.length = strlen(content);
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 处理errCode
        // 等待fetch结果
        int timeout = 100;
        while (timeout-- > 0 && !g_callback) {
            usleep(1000);
        }
        // 清理request
        HMS_Rcp_DestroyRequest(request);
        // 清理request->content
        free(request->content);
        // 关闭session
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
        return 0;
    }

使用put发送网络请求 (C/C++)

场景介绍

发送一个带有默认HTTP参数的HTTP PUT请求,并返回来自服务器的HTTP响应。使用异步回调。常用于向服务器更新资源。PUT请求将更新的数据发送到特定的URL,用于替换指定资源的全部内容。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <cstdlib>
    #include <cstring>
    #include <stdio.h>
    #include <unistd.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建会话,会话发起put请求。“http://www.example.com”请根据实际情况替换为想要请求的URL地址。等待响应返回后,销毁request并关闭session。
    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode)
    {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        // 注意清理响应
        if (response != NULL) {
            response->destroyResponse(response);
        }
    }
    bool g_callback = false;
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com";
        const char *content = "content";
        // 创建request,并设置request的参数
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        request->method = RCP_METHOD_PUT;
        request->content = (Rcp_RequestContent *)calloc(1, sizeof(Rcp_RequestContent));
        request->content->type = RCP_CONTENT_TYPE_STRING;
        request->content->data.contentStr.buffer = content;
        request->content->data.contentStr.length = strlen(content);
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起fetch请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 等待结果
        int timeout = 100;
        while (timeout-- > 0 && !g_callback) {
            usleep(1000);
        }
        // 在退出前取消可能还在执行的requests 
        errCode = HMS_Rcp_CancelSession(session);
        // 清理request
        HMS_Rcp_DestroyRequest(request);
        // 关闭session
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
        // 清理request content
        free(request->content);
        return 0;
    }

使用head发送网络请求 (C/C++)

场景介绍

发送一个带有默认HTTP参数的HTTP HEAD请求,并返回来自服务器的HTTP响应。使用异步回调。类似GET请求,但只返回相应头,不返回实体内容。可以获取资源的元信息,如文件大小、修改日期等。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <stdio.h>
    #include <unistd.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建会话,会话发起head请求。“http://www.example.com”请根据实际情况替换为想要请求的URL地址。等待响应返回后,销毁request并关闭session。
    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode)
    {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        // 注意清理响应
        if (response != NULL) {
            response->destroyResponse(response);
        }
    }
    bool g_callback = false;
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com/head";
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        request->method = RCP_METHOD_HEAD;
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起fetch请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 等待fetch结果
        int timeout = 100;
        while (timeout-- > 0 && !g_callback) {
            usleep(1000);
        }
        // 在退出前取消可能还在执行的requests 
        errCode = HMS_Rcp_CancelSession(session);
        // 清理request
        HMS_Rcp_DestroyRequest(request);
        // 关闭session
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
    }

使用delete发送网络请求 (C/C++)

场景介绍

发送一个带有默认HTTP参数的HTTP DELETE请求,并返回来自服务器的HTTP响应。使用异步回调。用于从服务器删除资源。通过向指定URL发送DELETE请求,可以删除该URL上对应的资源。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <stdio.h>
    #include <unistd.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建会话,会话发起delete请求。“http://www.example.com”请根据实际情况替换为想要请求的URL地址。等待响应返回后,销毁request并关闭session。
    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode)
    {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        if (response != NULL) {
            response->destroyResponse(response);
        }
    }
    bool g_callback = false;
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com/delete";
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        request->method = RCP_METHOD_DELETE;
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起fetch请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 等待fetch结果
        int timeout = 100;
        while (timeout-- > 0 && !g_callback) {
            usleep(1000);
        }
        // 在退出前取消可能还在执行的requests 
        errCode = HMS_Rcp_CancelSession(session);
        // 清理request
        HMS_Rcp_DestroyRequest(request);
        // 关闭session
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
        return 0;
    }

使用cancel取消网络请求 (C/C++)

场景介绍

取消指定或正在进行的会话请求。

接口说明

具体API说明详见接口文档

接口名

描述

uint32_t HMS_Rcp_CancelRequest(Rcp_Session *session, const Rcp_Request *request);

取消指定或所有正在进行的会话请求。返回为空。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <stdio.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建会话,会话发起请求。“http://www.example.com”请根据实际情况替换为想要请求的URL地址。在使用fetch请求后,使用HMS_Rcp_CancelRequest取消网路请求。销毁request并关闭session。

    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode)
    {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        if (response != NULL) {
            response->destroyResponse(response);
        }
    }
    bool g_callback = false;
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com/delete";
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        request->method = RCP_METHOD_DELETE;
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起fetch请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 取消请求,处理errCode
        errCode = HMS_Rcp_CancelRequest(session, request);
        // 在退出前取消可能还在执行的requests 
        errCode = HMS_Rcp_CancelSession(session);
        // 清理request
        HMS_Rcp_DestroyRequest(request);
        // 关闭session
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
        return 0;
    }

使用close关闭会话 (C/C++)

场景介绍

远场通信请求结束后,需要关闭会话。调用此方法以释放与此会话关联的资源。

接口说明

具体API说明详见接口文档

接口名

描述

uint32_t HMS_Rcp_CloseSession(Rcp_Session **session);

关闭会话。

使用示例

  1. CPP侧导入模块。
    #include "RemoteCommunicationKit/rcp.h"
    #include <stdio.h>
    #include <unistd.h>
  2. CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。
    librcp_c.so
  3. 创建会话,会话发起请求后关闭会话。“http://www.example.com”请根据实际情况替换为想要请求的URL地址。等待响应返回后,销毁request并关闭session。
    void ResponseCallback(void *usrCtx, Rcp_Response *response, uint32_t errCode) {
        (void *)usrCtx;
        if (response != NULL) {
            printf("Response status: %d\n", response->statusCode);
        } else {
            printf("Fetch failed: errCode: %u\n", errCode);
        }
        if (response != NULL) {
            response->destroyResponse(response);
        }
    }
    bool g_callback = false;
    
    int main() {
        const char *kHttpServerAddress = "http://www.example.com";
        Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
        request->method = RCP_METHOD_GET;
        uint32_t errCode = 0;
        // 创建session
        Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
        // 配置请求回调
        Rcp_ResponseCallbackObject responseCallback = {ResponseCallback, NULL};
        // 发起fetch请求
        errCode = HMS_Rcp_Fetch(session, request, &responseCallback);
        // 等待fetch结果
        int timeout = 100;
        while (timeout-- > 0 && !g_callback) {
            usleep(1000);
        }
        // 在退出前取消可能还在执行的requests
        errCode = HMS_Rcp_CancelSession(session);
        // 处理errCode
        errCode = HMS_Rcp_CloseSession(&session);
        // 处理errCode
        HMS_Rcp_DestroyRequest(request);
        return 0;
    }

最后

小编在之前的鸿蒙系统扫盲中,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)路线图、文档、视频、用来跟着学习是非常有必要的。 

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员

→  鸿蒙全栈最新学习笔记 希望这一份鸿蒙学习文档能够给大家带来帮助 

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐