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 的相关文章

  • Rails API 设计无需禁用 CSRF 保护

    早在 2011 年 2 月 Rails 就改为需要 CSRF 令牌all non GET http weblog rubyonrails org 2011 2 8 csrf protection bypass in ruby on rail
  • 创建rest api url以连接mysql数据库

    我想学习如何创建一个rest api url 以便我可以使用该url获取信息并将信息发布到我的mysql数据库中 谷歌搜索了很多并阅读了各种文章 但没有找到任何精确的内容可以学习 所有内容均以 about api 开头 以已创建的其余 ur
  • 为我的网站构建 API 哪个更好:MVC 或 Ado.net 数据服务?

    我有一个用MVC构建的网站 现在我想为这个网站构建一个API 让用户使用这个API来实现不同的网站 Web服务 插件和浏览器扩展 我经历过这个article http weblogs asp net cibrax archive 2010
  • Google BigQuery 与 PHP 集成

    我需要帮助将 google bigquery 代码集成到 PHP 中 所以我可以从 php 代码本身执行查询和其他类型的操作 需要您的帮助并建议我一些工作示例链接 提前致谢 这是一段代码 正确地创建一个Google Client using
  • RabbitMQ HTTP API 请求 401 未经授权

    我正在尝试访问 RabbitMQ Rest 但收到 401 未经授权的错误 我想访问队列信息并获取消息编号 我发现这是一个解决方案 DefaultHttpClient httpClient new DefaultHttpClient Htt
  • 如何从 Google Fit API 获取步数?

    请原谅我的笨蛋 我对 Android 和 Google API 完全陌生 我有以下连接到 GoogleFit 的代码 我还有一个 API 密钥和 Oauth 我在哪里 如何使用 API 密钥和 Oauth 关于如何获取它们的指南有很多 但关
  • 有没有 API 可以在两个 iphone/ipod Touch/ipad 之间共享数据? (GameKit 除外)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有任何框架 API可以轻松找到其他设备并在它们之间共享数据 请不是游戏包 bonjour 会很棒
  • MongoRuntimeError:连接池已关闭

    我看到我的猫鼬池在插入数据之前似乎已关闭 因为在调用云集群中的猫鼬数据库时出现此错误 MongoRuntimeError Connection pool closed 但我正在等待所有的电话 所以我不确定为什么会看到这个问题 也许这与我定义
  • 如何在 PHP 中使用 Amazon 的 API 来搜索书籍? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一款用于图书共享 评论和推荐的 Facebook 应用程序 我搜索了网络 使用我能想到的每个
  • 库和 API 之间还有区别吗?

    每当我询问人们 API 和库之间的区别时 我都会得到不同的意见 有的给这种 http mail python org pipermail tutor 2002 May 014458 html定义 API 是规范 库是实现 有些会告诉你这个类
  • 限制 Rails 应用程序生成的出站 API 调用

    我不是专业的网络开发人员 但我喜欢把浏览网站作为一种爱好 最近 我一直在开发一个 Rails 应用程序作为一个项目来帮助我学习框架 我的玩具应用程序的目标是通过其他服务的 API 获取数据 并让我可以使用搜索功能进行查询 但是 我想要从中提
  • twig json_encode 空 json

    我正在从 API 接收元素列表 所有元素的格式都很好 当我使用树枝转储其中一个时 我得到以下信息 Leg 2695 id null reservation null airportStart AIX LES MILLES airplaneT
  • 空手道包含且所有键值不匹配错误

    我尝试学习空手道 但遇到了一些问题 我无法自己解决 所以我的功能看起来相当简单 Feature Alerting get the list of all alerts Background url url Scenario Retrieve
  • Magento SOAP V2 API - 附加属性设置为空

    几个小时以来 我一直在尝试通过 SOAP V2 API 创建具有附加属性的产品 每当我打电话时就会添加该产品目录产品创建但我随请求发送的附加属性被设置为空 每当我不添加附加属性时 这两个属性都会设置为其默认值 因此我认为这些属性正在发送和接
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • 从 iTunes ID 查找播客源的 URL。 (iTMS API)

    我正在研究一种将 iTunes 播客 ID 转换为播客制作人提供的 RSS 提要的方法 我知道RSS 生成器 http ax itunes apple com rss 可用于生成播客链接的提要 但这些链接指向 HTML 页面 如果您打开 i
  • 创建连接到 facebook 的 j2me 应用程序(不是 swt 项目)

    我想创建一个简单的 j2me 应用程序作为开始 它与 facebook 链接 为了这 我从下载了 facebook apihttp kenai com projects facebookapime downloads http kenai
  • IB Java API:提取多个合约的股票数据(实时柱)

    我正在对算法交易和 IB API 进行一些自学和实验 我决定使用 Java 但我愿意切换到 C 我浏览了一个在线教程 该教程将引导您完成下面所示的代码 但我想知道是否可以将其扩展到一只股票之外 我想浏览所有 SP500 股票并检查股票数据
  • Swagger 生成 javascript-closure-angular-client

    我是 swagger 的新手 我从 swagger 的在线编辑器生成了一个 javascript 闭包角度客户端 它给了我一个 DefaultAPI js 和其他与我的对象定义匹配的 JS 文件 我在 swagger 文档和网上搜索了一种在
  • Canvas.drawVertices(...) 不绘制任何内容

    下一类是红色三角形的视图 public class FreeStyleViewII extends View private final Paint paint new Paint private final int colors new

随机推荐

  • 【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