libcurl 使用记录2(curl_muli的使用)

1.libcurl 提供的easy 接口,只能同步处理请求,处理过程中,curl_easy_perform会阻塞等待。如果想用easy 接口实现并行处理,必须使用调用程序本身实现多线程。

2:libcurl 提供的multi 接口,是基于easy 接口来实现。它通过管理很多个easy接口,来请求时找到一个空闲的easy curl 来进行处理。有没有感觉这个跟linux的select 机制很像,选择满足时间的fd。对,在这里,每个curl 相当于一个fd, libcurl 实现了跟select 特别相近的接口-----参数个数和类型含义一样,但是返回值不同(linux 返回值的fd的个数)

curl_multi_add_handle(multi_handle, handles[i]);---将多个easy handle 注册到multi handle中。
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); //extracts file descriptor information from a given multi_handle
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);


3:如果select 函数返回了正确的结果,下面就可以调用curl_multi_perform 进行处理了 

curl_multi_perform 函数当有IO事件发生时会立即返回。


`CURLOPT_SSL_CTX_FUNCTION` 是一个 libcurl 的选项,它可以用来设置一个回调函数,该回调函数在 SSL/TLS 握手时被调用。该回调函数应该返回一个 SSL_CTX 指针,该指针将被用于 SSL/TLS 连接。 以下是一个示例代码,展示了如何使用 `CURLOPT_SSL_CTX_FUNCTION`: ``` #include <curl/curl.h> #include <openssl/ssl.h> // 自定义回调函数 static CURLcode sslctx_callback(CURL * curl, void * ssl_ctx, void * userptr) { SSL_CTX * ctx = (SSL_CTX *)ssl_ctx; // 在 SSL_CTX 中设置一些选项 SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); SSL_CTX_set_verify_depth(ctx, 2); return CURLE_OK; } int main() { CURL * curl = curl_easy_init(); if(curl) { CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1); curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/cacert.pem"); curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctx_callback); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } return 0; } ``` 在上面的代码中,我们使用 `curl_easy_setopt` 函数来设置 `CURLOPT_SSL_CTX_FUNCTION` 选项,将自定义回调函数 `sslctx_callback` 传递给 libcurl。在该回调函数中,我们可以通过传入的 SSL_CTX 指针对 SSL/TLS 连接进行一些自定义设置,例如设置验证选项等。最后,我们需要调用 `curl_easy_perform` 函数来执行 HTTPS 请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值