licurl API

2023-05-16

这个文档是小编在curl官网上使用谷歌翻译翻译的,详细信息看官网

curl

描述

这是关于C程序中如何使用libcurl的简单概述,libcurl程序的使用需要通过以下5个方面libcurl-easy、libcurl-multi、libcurl-share、libcurl-url和libcurl-tutorial,通过这5个方面的学习,就可以熟练的掌握libcurl知识。当然libcurl可以被其他的语言使用,包括java、php等。

主要包括:全局环境变量、libcurl的easy传输和mulit传输、持久性连接、可移植性等。

在使用libcurl的过程中,有一个全局的环境变量需要注意,这个全局的环境变量是通过curl_global_init 函数创建的。在使用结束之后需要调用curl_global_cleanup函数释放。这个环境变量在使用时必须设置和维护,可参阅下面的全局常量。当然如果编译 libcurl 时支持多个 SSL 后端,则可以在 curl_global_init 之前调用函数curl_global_sslset来选择活动的 SSL 后端。

使用libcurl传输有两种方式:

1、使用easy接口传输,这个接口使用简单,用于单向传输。同步传输,一个进程就只有一个传输句柄。使用步骤:首先使用curl_easy_init创建一个“简单处理” 。之后使用curl_easy_setopt在该句柄中设置所需的一组选项。使用curl_easy_setopt设置的选项。它们将在每次重复使用此句柄时使用,更改选项或使用curl_easy_reset将它们全部重置。属性设置完成之后调用curl_easy_perform并让它执行传输。完成后,函数返回。              可以传输文件??

2、使用mulit接口传输,这个是一个多接口传输是一个异步传输,调用它并且在每次调用时只执行一小部分传输。如果您想在传输过程中或类似情况下做一些事情,这是完美的。多接口允许您在 libcurl 操作上进行 select(),甚至可以使用单个线程轻松同时下载多个文件。请参阅libcurl-multi手册页中的更多详细信息。

您可以让多个简单句柄共享某些数据,即使它们在不同的线程中使用。这个就是使用共享接口设置的,如libcurl-share手册页中所述。

当然除了以上一些功能还有其他功能:

curl_version_info()

获取详细的 libcurl(和其他使用的库)版本信息

curl_getdate()

将日期字符串转换为 time_t

curl_easy_getinfo()

获取有关已执行传输的信息

curl_formadd ()

帮助构建 HTTP 表单 POST

curl_formfree()

释放使用curl_formadd构建的列表

curl_slist_append()

建立一个链表

curl_slist_free_all()

释放整个 curl_slist

curl_url_set()

解析一个 URL

Libcurl 符号名称

libcurl 接口中的所有公共函数都以'curl_'(带有小写c)为前缀。您可以在库源代码中找到其他函数,但其​​他前缀表示这些函数是私有的,可能会在下一个版本中更改,恕不另行通知。

可移植性

libcurl在它编译和构建的任何平台上都完全相同。

线程

libcurl 是线程安全的,但也有一些例外。有关更多信息,请参阅libcurl-thread。

持久连接

持久连接意味着如果条件合适,libcurl 可以为多个传输重用相同的连接。

libcurl 将始终尝试使用持久连接。每当您使用curl_easy_perform或curl_multi_perform等时,libcurl 将尝试使用现有连接进行传输,如果不存在,它将打开一个新连接,以便在可能的后续调用curl_easy_perform或curl_multi_perform时重复使用。

为了让 libcurl 充分利用持久连接,您应该使用相同的句柄进行尽可能多的文件传输。

如果您使用简单接口并调用curl_easy_cleanup,libcurl 持有的所有可能打开的连接都将被关闭并忘记。

当您创建了多句柄并使用多接口时,连接池将保留在多句柄中,因此关闭和创建新的简单句柄以进行传输不会影响它们。相反,所有添加的简单句柄都可以利用单个共享池。

全局常量

1、为啥要是用全局常量???

libcurl 使用的常量有很多种,主要是通过它内部对其他库的使用,对于库加载器来说设置起来过于复杂。因此,程序必须在程序加载并运行后调用库函数才能完成库代码的设置。例如,当通过 GNU TLS 库为 SSL 功能构建 libcurl 时,该库中有一个详细的树来描述 SSL 协议。

2、全局常量如何设置???

在使用libcurl之前我们需要调动curl_global_init函数。这个函数会分配libcurl使用所需的资源(例如上面提到的 GNU TLS 树的内存),当然,有分配就会有释放,他的伴随函数curl_global_cleanup会释放他分配的一些资源。

构建使用 libcurl 的程序的基本规则是:

在程序启动后立即调用curl_global_init,并使用CURL_GLOBAL_ALL参数,此时它仍然只有一个线程,并且在它使用 libcurl 之前。在程序退出之前立即调用curl_global_cleanup,此时程序再次只有一个线程并且在最后一次使用 libcurl 之后。

3、为啥要在程序启动后立即调用curl_global_init函数。

实际上并不需要在程序的开头和结尾调用函数——这通常是最简单的方法。其实在程序运行时没有其他线程运行就可以调用这些函数。那这又是为什么?

其实这些全局常量函数不是线程安全的,因此当程序中有其他线程正在运行时,即使不调用它们。当时也没有其他线程使用 libcurl 。那我们也不能确定目前使用的全局常量是否在使用。因为有些函数在内部调用了其他库的类似函数,并且这些函数同样是线程不安全的。

当我们编写使用 libcurl 的代码不是主程序,而是程序的模块化部分(例如另一个库)时,全局常量就需要我们特别注意。作为一个模块,我们不知道是否有其他的库或者函数使用libcurl,更无法确定是否在程序的开头和结尾有设置全局环境变量。因此,我们的模块就需要自己的全局常量函数。这样,该模块在程序的开始和结束处具有控制权,并且有一个地方可以调用 libcurl 函数。如果程序中的多个模块使用 libcurl,它们都会分别调用 libcurl 函数,这是可能需要考虑另一个问题,这么多模块全都初始化全局变量,不会出现问题吗?其实这是没关系,因为程序中只有第一个curl_global_init和最后一个curl_global_cleanup会改变任何内容。(libcurl 使用静态内存中的引用计数)。

在 C++ 模块中,可以让构造函数调用curl_global_init和析构函数调用curl_global_cleanup并满足 libcurl 的要求。(警告:如果从 Windows DLL 初始化 libcurl,则不应从 DllMain 或静态初始化程序对其进行初始化,因为 Windows 在此期间持有加载程序锁,并且可能导致死锁。)

curl_global_init特性:

curl_global_init有一个参数,它告诉要设置全环境局常量哪些那些特性。为了使用除CURL_GLOBAL_ALL之外的参数(表示设置整个事物),您必须对 libcurl 的内部工作以及它所属的程序的特性有所了解。

全局环境常量的一个特性是内存分配器的标识。curl_global_init选择系统默认内存分配器,但我们也可以使用curl_global_init_mem提供您自己的内存分配器。但是没有办法在模块化程序中使用curl_global_init_mem—— 程序中可能使用 libcurl 的所有模块都必须就一个分配器达成一致。

libcurl 中有一个故障保护功能,就是当我们没有使用curl_global_init函数初始化全局环境变量的时候,函数curl_easy_init会自行设置环境。它为此获得的资源在程序退出时由操作系统自动释放。此故障保护功能的存在主要是为了向后兼容,因为曾经有一段时间不存在全局函数。因为它只在最简单的程序中就足够了,所以不建议任何程序依赖它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

licurl API 的相关文章

  • Postman 中的“传输开始”是什么意思?

    我试图弄清楚为什么 API 需要很长时间才能处理我的请求 并在 Postman 中发现了这一点 传输开始是什么意思 https community postman com t how to interpret time details in
  • OCR 解析获取复选框或单选按钮值

    I need to parse OCR image file and get all texts and checkbox values How to get Checkbox or Radio Button value from OCR
  • Twitter API:获取关注者 +99

    使用 twitter API 和 OAuth 如果我要调用用户关注者 状态 关注者 我将仅返回 99 个结果 有没有办法让我返回 99 然后从关注者 100 开始再次调用 然后循环这种调用方式 直到返回关注者总数 或者只是返回所有关注者 您
  • 在 Netsuite 中按自定义字段搜索客户

    我能够使 api 在 php 中工作并通过内部 ID 搜索客户 不过 我有一个场景 我将通过自定义字段搜索客户 在 客户 下 它有一个自定义选项卡 其中包含多个域名和域详细信息 例如 主要搜索条件 域名 这在 netsuite php ap
  • LinkedIn 分享 API-v2 返回炒股

    我对 LinkedIn Shares API 的逻辑完全感到困惑 因为我从有关共享的文档中读到的内容LinkedIn API 共享文档 https developer linkedin com docs guide v2 shares sh
  • 如何通过 SOAP API 禁用/停用 SalesForce 用户?

    我想使用 SOAP API 以编程方式禁用用户 我怎样才能做到这一点 我正在使用合作伙伴 API 并且拥有开发人员版本 我已设置管理用户权限 我已经经历过this http www salesforce com us developer d
  • API、框架和中间件之间有什么区别? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 API 框架和中间件之间有什么区别 本质上 它们都为应用程序提供抽象的低级服务 既然如此 为什么 dot net 被称为框架 而 windows
  • Rabl、Jbuilder 或手动 json 构建 api?

    要为大规模应用程序构建 api 就性能而言 哪种方法更好 我应该使用 Rabl Jbuilder 还是手动构建 json 对象 我正在为移动应用程序构建 api endpoints 在性能方面 您应该尝试创建一些基本的性能测试 并对它们进行
  • 如何在AngularJS控制器中调用API?

    我需要在 AngularJS 控制器中执行这些 API 调用 任何例子都会有帮助 app post user auth users auth app get user logout helpers isAuthenticated users
  • 使用 oAuth 或其他方式实施访问

    我正在尝试想办法向其他第三方网站开放网站及其部分数据库 类似于 Twitter 让网络应用程序连接到其数据库以检索数据并可能存储数据的方式 我最初的研究让我想到了 oAuth 或者是 openID 我需要做的是让第三方网站登录网站上的用户帐
  • 通过 AWS API Gateway 上传的 PDF 已损坏

    我正在尝试使用已部署到 AWS API 网关的 C Web API 通过 Web 表单将 PDF 上传到 S3 存储桶中 这是我的代码 private static IAmazonS3 s3Client public static asyn
  • 如何将 CORS 添加到 compojure-api 应用程序?

    如何将 CORS 添加到此代码片段 def app api swagger ui docs spec swagger json GET route a a GET route b b GET route c c 我想用https githu
  • TypeError:expect(...).to.startsWith 不是一个函数 - chai 和 chakram

    我开始编写一些自动化测试 API 现在我尝试对此端点执行以下操作 https dog ceo api breeds image random https dog ceo api breeds image random 所以我添加到我的函数中
  • OpenTok - 如何手动发布/取消发布?

    我查看了这些链接 http www tokbox com opentok api tools js documentation overview publish html http www tokbox com opentok api to
  • 需要帮助:google、yahoo、hotmail 联系人 api [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想从 Gmail Windows Live 和 Yahoo 导入地址簿联系人 就像 Facebook 一样 在 facebook 中 当
  • 在 youtube api 中检测播放事件

    我正在寻找一种通过 Javascript 检测嵌入 Youtube 视频中的播放事件的方法 现在我能够检测到状态更改 但我不知道如何在之后解除事件绑定并触发另一个事件来表明它已完成 我也不想使用 add removeEventListene
  • Aurelia Post 使用 http-fetch-client 生成选项请求

    我正在创建一个小型论坛 我们公司的人员可以使用 aurelia 为他们想要即时销售的商品或服务发布广告 我有一个广告页面列表 工作正常 每个广告的详细信息页面都工作正常 都使用来自 api 的 get 请求 然而 当有人想在广告上添加评论时
  • 无法为 api 路由 laravel 设置 cookie

    使用后端 laravel 和前端 SPA vue js vue cli 3 进行服务 我需要通过 httpOnly cookie 不是 localStorage 进行身份验证 我用tymondesigns jwt auth https gi
  • Shutterfly 订单 API 。

    我找到了这个网站 http www shutterfly com documentation api OrderImage sfly http www shutterfly com documentation api OrderImage
  • 如何将带有子查询的 JPQL 转换为 Criteria API 等效项?

    有一个由 5 个实体组成的简单对象模型 Company 组织 Address Club Group 公司与单个组织相关联 团体和俱乐部也与单个组织相关联 它们是单向的 这意味着组织不包含对其所有者的引用 一个组织可以有 0 个或多个地址 子

随机推荐

  • 【STM32】创建stm32工程中,各个文件夹及部分文件作用

    USER xff1a 存放工程文件 主函数文件 main c 以及其他包括system stm32f10x c等 CORE xff1a 用来存放核心文件和启动文件 OBJ xff1a 是用来存放编译过程文件以及hex 文件 STM32F10
  • Qt4.8类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • Qt5.9类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • Qt5.15类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • Qt6.3类继承关系图(全网最全)

    一 概述 在学习Qt的时候快速的查询了解类的继承关系对我们的学习会有很大的帮助 xff0c 而网上流传的多是较老版本的 xff0c 并且是jpg格式 xff0c 不便于学习使用 xff0c 所以我就花了一些时间整理了这一套Qt类继承图 xf
  • DSPF28335 SCI FIFO串口通讯

    在工作过程中 xff0c 通过串口进行上位机与控制器之间进行数据的传输 xff0c 标准的串口通讯容易造成数据的丢失和内存堆满的现象 xff0c 便使用SCI中的FIFO对数据进行中断处理 一 串口通信基本知识 F28335 处理器共有 3
  • 树莓派4B:控制步进电机

    记录一下驱动两相四线步进电机的过程 文章目录 准备阶段接线阶段树莓派python程序 准备阶段 准备以下物品 xff0c 淘宝都可以买到 57步进电机 xff08 两相四线 xff09 电源开关 xff08 220v转24v xff0c 3
  • 2019全国大学生电子设计竞赛(电赛)回忆录

    我给大家整理了历年电赛的题目和材料清单 xff0c 大家可以对比着看 关注微信公众号 Opencv视觉实践 xff0c 回复 电赛资料 领取 电赛是我一进大学就听学长们无数此提起的一场四天三夜的盛会 xff0c 我也自大一开始便期待着 xf
  • 【网络】HTTP中的GET方法和POST方法

    1 GET方法 xff1a 获取资源 GET方法用来请求访问已被URL识别的资源 指定的资源经服务器端接续后返回内容 也就是说 xff0c 如果请求的资源是文本 xff0c 那就保持原样返回 xff1b 如果像是CGI xff08 Conm
  • 类的6个默认成员函数

    类的成员函数 1 构造函数2 析构函数3 拷贝构造函数4 深浅拷贝5 运算符重载赋值运算符重载的特性 xff1a 1 构造函数 xff08 构造函数的调用发生在对象的创建过程中 xff0c 所以会牵扯到this指针传对象的地址问题 另外创建
  • 通过onvif抓取海康摄像头图片,以及解决海康摄像头抓取图片需要验证问题,实现摄像头一段时间换一个地方的同时抓取一张图片。

    1 实现海康摄像头的图片的抓取 思路 xff1a 1 首先获取图片的url xff0c 2通过java实现图片的下载 1 使用onvif获取图片的url 首先获取OnvifDevice的对象 OnvifDevice od 61 new On
  • 超详细电烙铁如何使用?

    电烙铁是电子硬件工程师的一个必备工具了 它主要用来焊接一些电子元器件到PCB主板上 xff0c 用来做一些维修 xff0c 验证 xff0c 分析等等 那这么一个家伙要如何使用呢 xff1f 首先来看一个电烙铁的基本外观 xff1a 它一般
  • Makefile和cmake学习

    一 Makefile 一 什么是Makefile 1 Makefile 可以简单的认为是一个工程文件的编译规则 xff0c 描述了整个工程的编译和链接等规则 其中包含了那些文件需要编译 xff0c 那些文件不需要编译 xff0c 那些文件需
  • Ros下编译某功能包时出现很多“未定义的引用”的解决方法(本人版本是ubuntu18.04)

    问题描述 xff1a 在工作空间下编译某功能包时出现 在函数 中未被定义等问题 xff0c 如图所示 解决方案 xff1a 第一步 xff1a 查看自己的gcc版本和g 43 43 版本是否一致 xff0c 打开终端输入以下命令 gcc v
  • STM32—串口通讯详解

    串口通讯目录 物理层协议层USART简介开发板与上位机的连接代码讲解 xff1a 一 初始化结构体二 NVIC配置中断优先级三 USART配置函数讲解四 传输数据的函数 xff1a 1 发送一个字节2 发送字符串3 重定向printf函数发
  • 二进制数的算术运算和逻辑运算

    算术运算 二进制数加法采用逢二进一 减法采用借一作二 十六进制数加法采用逢十六进一 减法采用借一作十六 1位八进制可以写成3位二进制 xff0c 因为3位二进制可以表示十进制范围0 7 xff0c 也就是1位八进制的表示范围 1位十六进制可
  • STM32串口接收一帧数据方法(处理一帧数据中所需内容)

    stm32支持接受单个数据或者一帧数据 xff0c 若配置单个数据接收中断的话 xff0c 会出现接收包丢包 xff0c 数据不完整的情况 xff01 因此在stm32的串口中断中 xff0c 还有一个IDLE中断 xff0c 用来产生串口
  • 使用火狐拓展插件以及运行脚本的超详细方法

    1 首先我们需要下载火狐浏览器 火狐浏览器官网 xff1a 火狐浏览器 打开后默认页面 xff1a 2 如图所示点击右上角打开菜单 xff0c 然后点击附加组件 xff1a 3 进入该页面后在搜索框输入 xff1a tampermonkey
  • static关键字在c/c++中的作用

    static关键字在c c 43 43 中的作用 static在c语言中有三个作用 xff1a 修饰函数 修饰局部变量 修饰全局变量 被static修饰的全局变量被称之为静态全局变量 静态全局变量和全局变量在存储方式上是一致的 xff0c
  • licurl API

    这个文档是小编在curl官网上使用谷歌翻译翻译的 xff0c 详细信息看官网 curl 描述 这是关于C程序中如何使用libcurl的简单概述 xff0c libcurl程序的使用需要通过以下5个方面libcurl easy libcurl