鸿蒙HarmonyOS NEXT开发实战:HTTP发起网络数据请求NAPI封装(C/C++)
鸿蒙开发实战往期文章必看: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响应。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <stdio.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建Request对象。"https://www.example.com"请根据实际情况替换为想要请求的URL地址。(实际使用时请将该代码块放入main函数或者其他函数区域内)。 const char *kHttpServerAddress = "http://www.example.com";
Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
[*]创建会话。(实际使用时请将该代码块放入main函数或者其他函数区域内)。 uint32_t errCode = 0;
Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
[*]发起请求,并处理返回结果。(实际使用时请将该代码块放入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);
}
[*]清理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异步回调。
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <stdio.h>#include <unistd.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建Request对象。"https://www.example.com"请根据实际情况替换为想要请求的URL地址。(完整见步骤5) const char *kHttpServerAddress = "http://www.example.com";
Rcp_Request *request = HMS_Rcp_CreateRequest(kHttpServerAddress);
[*]创建会话。(完整见步骤5) uint32_t errCode = 0;
Rcp_Session *session = HMS_Rcp_CreateSession(NULL, &errCode);
[*]发起请求,并处理返回结果。最后关闭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响应。使用异步回调。常用于从服务器获取数据。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <stdio.h>#include <unistd.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建会话,会话发起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请求将参数包罗在请求主体中,实用于创建新资源、提交表单数据或执行某些操作。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <cstdlib>
#include <cstring>
#include <stdio.h>
#include <unistd.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建会话,会话发起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,用于替换指定资源的全部内容。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <cstdlib>
#include <cstring>
#include <stdio.h>
#include <unistd.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建会话,会话发起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请求,但只返回相应头,不返回实体内容。可以获取资源的元信息,如文件巨细、修改日期等。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <stdio.h>#include <unistd.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建会话,会话发起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上对应的资源。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <stdio.h>#include <unistd.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建会话,会话发起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);
取消指定或所有正在举行的会话请求。返回为空。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <stdio.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建会话,会话发起请求。“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);
关闭会话。
使用示例
[*]CPP侧导入模块。 #include "RemoteCommunicationKit/rcp.h"
#include <stdio.h>#include <unistd.h>
[*]CMakeLists.txt中添加以下lib。(具体请见C API开发准备)。 librcp_c.so
[*]创建会话,会话发起请求后关闭会话。“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开发、前端开发、对鸿蒙感兴趣以及转行人员
→ 鸿蒙全栈最新学习条记 希望这一份鸿蒙学习文档可以或许给大家带来资助
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]