l名称

libcurl 客户端 URL 传输

描述

这是一个如何使用libcurl进行C语言编程的简短概述。这里提到的每个功能都有特定的手册页。还有 libcurl-easy 手册页,libcurl-multi 手册页,libcurl-share 手册页和libcurl_tutorial 手册页,用于深入理解如何使用libcurl进行编程。

有很多可用的绑定让你可以使用喜欢的语言访问libcurl,在其它地方寻找这些文档。

libcurl有一个全局环境常量,使用libcurl时必须手动设置和维护。换句话说你需要在你的程序开始之前调用 curl_global_init,程序结束之后调用 curl_global_cleanup。详细描述参考 GLOBAL CONSTANTS。

如果编译的 libcurl 支持 SSL backends,调用 curl_global_init 前可调用 curl_global_sslset 来选择活动 SSL backend。

要传输文件,你可以使用 curl_easy_init 创建一个简单句柄(easy handle)用于单个传输(在任一方向)。然后使用 curl_easy_setopt 在该句柄中设置所需的选项集。使用 curl_easy_setopt 设置的选项,将在每次重复使用此句柄时生效,直到您更改选项,或者使用 curl_easy_reset 重置它们。

要真正的传输数据,你可以选择使用简单接口(easy interface)或多接口(multi interface)。

简单接口是一个同步接口,使用该接口时调用 curl_easy_perform 来执行传输工作。当传输完成时,函数返回并继续后续流程。更多详细信息参考 libcurl-easy 手册页。

多接口是一个异步接口,使用该接口时调用 curl_multi_perform 来执行传输工作。每次调用时只执行一小部分传输。如果在传输的过程中可以做其它事情,那就完美了。多接口允许您在 libcurl 上执行 select 操作,甚至可以使用单线程轻松地同时下载多个文件。更多详细信息参考 libcurl-multi 手册页。

你可以实现多个简单接口共享某些数据,甚至它们使用在多个不同的线程中。这个神奇的功能是由共享接口(share interface)实现的,详细信息参考 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

与 LIBCURL 联系

在类Unix的机器上,有一个名为 "curl-config" 的工具,当执行 'make install' 时,它会与curl其余的文件一起安装。

附加curl-config使应用程序与libcurl之间的链接以及开发者学习如何使用libcurl变得简单。

运行 'curl-config --libs' 获取你需要的(额外的)连接选项,链接到你已安装libcurl的特定版本。更多详细信息参考 curl-config 手册页。

将libcurl作为其发行版的一部分提供的类Unix操作系统通常不提供curl-config工具,而只是为此目的在公共路径中安装库和头文件。

许多Linux和类似系统使用pkg-config提供有关库的构建和链接选项,libcurl也支持这些选项。

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保存的所有可能打开的连接都将被关闭并被遗忘。

未完待续...

libcurl 概述(翻译)的更多相关文章

  1. HugePages概述--翻译自19C文档

    翻译自: https://docs.oracle.com/en/database/oracle/oracle-database/19/unxar/administering-oracle-databa ...

  2. docker-compose概述--翻译

    Overview of Docker Compose 译文 Docker Compose 是一个用来定义和执行多Docker容器程序的工具,如果使用Compose,你将可以使用一个YAML文件来配置你 ...

  3. [翻译]开发文档:android Bitmap的高效使用

    内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...

  4. 翻译qmake文档 目录

    利用空闲时间把qmke的文档翻译出来,翻译水平有限,有些地方翻译的不好,请谅解, 如果您能指出来,我会很感激并在第一时候做出修改. 翻译qmake文档(一) qmake指南和概述 翻译qmake文档( ...

  5. [翻译]Bitmap的异步加载和缓存

    内容概述 [翻译]开发文档:android Bitmap的高效使用 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently", ...

  6. SQL Server中的事务日志管理的阶梯,级别1:事务日志概述

    SQL Server中的事务日志管理的阶梯,级别1:事务日志概述 翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳 级别1:事务日志概述 事务日志是一个文件,其中SQL服务器存储了所有与日志文件关联的数据库执行的 ...

  7. Unity3D用户手册

    Unity Manual 用户手册 Welcome to Unity. 欢迎使用Unity. Unity is made to empower users to create the best int ...

  8. 翻译qmake文档(一) qmake指南和概述

    翻译qmake文档 目录 英文文档连接: http://qt-project.org/doc/qt-5/qmake-manual.html http://qt-project.org/doc/qt-5 ...

  9. Apache log4net™ 手册——概述【翻译】

    原文地址 本文内容 概述 框架 日志(Loggers)和追加器(Appenders) 日志层次(Logger hierarchy) 追加器(Appenders) 筛选(Filters) 布局(Layo ...

随机推荐

  1. DAY04 与用户交 互格式化输出与运算符

    与用户交互 输入: input # python2与python3的区别 # python3 res = input('please in put your username>>>& ...

  2. CMD直接输入Java,Javac,Javap发生乱码解决方式

    首先需要设置jdk的默认编码,在之前一篇博文里有 然后在cmd里直接执行chcp 65001   代表将cmd换成UTF-8的显示页 936是GBK 437为英语

  3. C# 线程同步的多种方式

    实际应用中多个线程往往需要共享数据,因此必须使用同步技术,确保一次只有一个线程访问和改变共享数据.同步又分为进程内部线程的同步以及进程之间线程的同步. 进程内部线程同步: 1. lock : 使用比较 ...

  4. Longhorn 云原生容器分布式存储 - Air Gap 安装

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  5. “类型思维”之Typescript,你掌握了吗?

    (一)背景 JavaScript是一门动态弱类型语言 对变量的类型非常宽容 而且不会在这些变量和它们的调用者之间建立结构化的契约. 试想有这么几个场景: 1: 你调用一个别人写的函数,但是这个人没有写 ...

  6. GIMP 一键均匀添加多条参考线 一键均匀切分图片

    添加参考线 #!/usr/bin/env python2 # -*- coding: utf-8 -*- from gimpfu import * # orientation: ORIENTATION ...

  7. Disable_functions绕过整合

    转载 https://whoamianony.top/2021/03/13/Web安全/Bypass Disable_functions/ https://www.mi1k7ea.com/2019/0 ...

  8. nRF52832蓝牙iBeacon广播

    开发环境 SDK版本:nRF5_SDK_15.0.0 芯片:nRF52832-QFAA 蓝牙iBeacon实现 iBeacon的核心就是广播,不需要进行连接,通过在广播包中插入信息然后广播出去. 广播 ...

  9. VUE带Token访问Abp Vnext Api

    上篇登录保存token用了3种方式,都可以在header带上Token访问,本次使用第四种保存方式Vuex中保存状态 stroe中配置好需要保存的字段及方法 import Vue from 'vue' ...

  10. CUDA 矩阵乘法终极优化指南

    作者:马骏 | 旷视 MegEngine 架构师 前言 单精度矩阵乘法(SGEMM)几乎是每一位学习 CUDA 的同学绕不开的案例,这个经典的计算密集型案例可以很好地展示 GPU 编程中常用的优化技巧 ...