如何在Native侧集成三方库Curl,并进行HTTP数据请求

如何在Native侧集成三方库Curl,并进行HTTP数据请求

HarmonyOS
2024-03-19 16:23:22
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fiftystep

可以将Curl移植到HarmonyOS,然后在Native侧开发时直接使用Curl的C++库实现。具体HarmonyOS移植方法可参考链接。

具体使用步骤如下:

1.将移植后的Curl的so库放到Native工程的entry/libs/arm64-v8a/目录下;将移植后生成的、包含头文件的include目录放到entry/src/main/cpp目录下。

2. 在CMakeLists.txt文件中链入Curl对应的so库。

3. 在Native侧.cpp文件中通过引入头文件curl.h来使用Curl的相关能力。

具体可参考以下代码:

#include "curl/curl.h" 
// ... 
// get请求和post请求数据响应函数 
size_t ReqReply(void *ptr, size_t size, size_t nmemb, void *userdata) { 
    string *str = reinterpret_cast<string *>(userdata); 
    (*str).append((char *)ptr, size * nmemb); 
    return size * nmemb; 
} 
// http GET请求配置 
CURLcode CurlGetReq(const std::string &url, std::string &response) { 
    // curl初始化 
    CURL *curl = curl_easy_init(); 
    // curl返回值 
    CURLcode res; 
    if (curl) { 
        // 设置Curl的请求头 
        struct curl_slist *headers = NULL; 
        headers = curl_slist_append(headers, "Content-Type:application/json"); 
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); 
        // 设置请求的URL地址 
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); 
        // 接收响应头数据,0代表不接收 1代表接收 
        curl_easy_setopt(curl, CURLOPT_HEADER, 1); 
        // 设置数据接收函数 
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ReqReply); 
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response); 
        // 设置不使用任何信号/警报处理程序 
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); 
        // 设置超时时间 
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); 
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10); 
        // 开启请求 
        res = curl_easy_perform(curl); 
    } 
    // 释放curl 
    curl_easy_cleanup(curl); 
    return res; 
} 
 
static napi_value NatReq(napi_env env, napi_callback_info info) { 
    string getUrlStr = "http://app.huawei.com"; 
    string getResponseStr; 
    auto res = CurlGetReq(getUrlStr, getResponseStr); 
    if (res == CURLE_OK) { 
        OH_LOG_Print(LOG_APP, LOG_INFO, 0xFF00, "pure", "response: \n%{public}s", getResponseStr.c_str()); 
    } 
    // ... 
}

结果展示

与终端直接使用curl指令获取的网站信息一致。

参考链接

使用命令行CMake构建NDK工程

分享
微博
QQ
微信
回复
2024-03-19 23:58:50
相关问题
Native如何集成三方SO
183浏览 • 1回复 待解决
Native工程中如何使用其他三方so
305浏览 • 1回复 待解决
三方应用如何获取http代理信息
170浏览 • 1回复 待解决
如何获取可用的三方
213浏览 • 1回复 待解决
ArkTSNative如何进行map数据交互
209浏览 • 1回复 待解决
求大佬告知如何使用三方cpp
197浏览 • 1回复 待解决
如何在Native释放ArkTS对象
249浏览 • 1回复 待解决
native开发怎么引入curl
428浏览 • 1回复 待解决
如何在Native获取APP版本信息
204浏览 • 1回复 待解决
开发第三方SDK如何编译?
11668浏览 • 2回复 待解决
三方应用如何获取蓝牙mac地址
359浏览 • 1回复 待解决
如何在Native构建一个ArkTS对象
204浏览 • 1回复 待解决
ArkTS不支持使用第三方的js
1662浏览 • 1回复 待解决
三方js迁移有懂的吗?
325浏览 • 1回复 待解决