libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译

文章目录

  • 前言
  • 1、libcurl关键特点和功能
  • 2、没有使用openssl以及libssh2编译libcurl的文件和使用openssl和libssh2编译
  • 3、libcurl网络库的下载
  • 4、libcurl网络库的编译
      • 4.1、直接使用cmake编译,不使用 OpenSSL 和 libssh2库编译的出来的libcurl库
      • 4.2、使用 OpenSSL 和 libssh2库编译的出来的libcurl库

前言

libcurllibcurl的全称是"Client URL",即客户端URL库。它是一个开源的、跨平台的网络传输库,用于在程序中实现数据传输功能。libcurl提供了一组易于使用的API,可以用来进行HTTP、HTTPS、FTP、FTPS、SCP、SFTP、LDAP、SMTP等协议的数据传输。

1、libcurl关键特点和功能

  • 多协议支持:libcurl支持多种网络协议,使其成为一个通用的网络传输解决方案。您可以使用libcurl来处理HTTP请求,下载文件,上传文件,发送电子邮件,连接FTP服务器等等。

  • 跨平台:libcurl可在各种操作系统上运行,包括WindowsmacOSLinux等,使得它成为开发跨平台应用程序的理想选择。

  • 轻量级:libcurl是一个轻量级的库,其代码库相对较小,因此可以在资源受限的环境中使用。

  • 易于集成:libcurlAPI设计简单易用,可以很容易地集成到C、C++、Python、Java等编程语言中。

  • 支持代理和Cookie:libcurl支持HTTP代理,可以在代理服务器上执行数据传输。它还支持Cookie管理,使得在跨多个请求保持会话状态更加方便。

  • SSL/TLS支持:libcurl可以使用OpenSSLlibressl等库来提供安全套接层(SSL)和传输层安全(TLS)支持,从而实现安全的HTTPS传输。

  • 支持FTP上传和下载:libcurl提供了强大的FTP功能,可以用于上传和下载文件到FTP服务器。

  • 断点续传:libcurl支持断点续传功能,允许您在传输中断后恢复传输,从上次中断的地方继续传输文件。

由于libcurl具有强大而灵活的功能,它被广泛应用于各种应用程序和项目中。无论是开发命令行工具,还是构建网站、客户端应用程序,libcurl都是一个可靠的选择,可以帮助您轻松实现各种网络传输需求。

2、没有使用openssl以及libssh2编译libcurl的文件和使用openssl和libssh2编译

区别在于编译 libcurl 时是否链接 OpenSSLlibssh2 库。让我们详细解释一下:

  • 编译 libcurl 时未使用 OpenSSL 和 libssh2:

    • 如果在编译 libcurl 时没有链接 OpenSSLlibssh2 库,那么生成的 libcurl 将不支持使用 HTTPSSFTP**(SSH File Transfer Protocol)**等安全传输协议。
    • 这意味着您无法使用 libcurl 库来进行通过 HTTPSSFTP 进行安全的数据传输。
  • 编译 libcurl 时使用了 OpenSSL 和/或 libssh2:

    • 如果在编译 libcurl 时链接了 OpenSSL 和/或 libssh2 库,那么生成的 libcurl 将支持 HTTPS 和/或 SFTP 等安全传输协议。
    • 这意味着您可以使用 libcurl 库来进行通过 HTTPSSFTP 进行安全的数据传输。

需要注意的是,HTTPS 使用 OpenSSL 库,而 SFTP 使用 libssh2 库。这两个库都提供了加密和安全传输所需的功能。

因此,如果您希望在 libcurl 中支持 HTTPSSFTP 等安全协议,您需要在编译时链接 OpenSSLlibssh2 或其他提供相应功能的库。否则,libcurl 将只能用于不涉及加密的传输协议(如 HTTPFTP 等)。

使用 libcurl 可以方便地在程序中进行网络通信,而通过链接 OpenSSLlibssh2,您可以确保通信是安全的并且可以加密传输敏感数据。

3、libcurl网络库的下载

github地址:libcurl下载。我下载的是:本人下载
libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第1张图片
下载完里面文件大概是这样子:
libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第2张图片

4、libcurl网络库的编译

4.1、直接使用cmake编译,不使用 OpenSSL 和 libssh2库编译的出来的libcurl库

  • 找到文件夹中camkeLists.txt文件所在处:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第3张图片
  • 可以看到:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第4张图片
  • 打开 .sln 解决方案文件生成解决方案文件即可:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第5张图片
  • 可以看到生成了libcurl-d.liblibcurl-d.dll两个库文件:
    在这里插入图片描述
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第6张图片
    这里就是不使用 OpenSSLlibssh2库编译的出来的libcurl库,前面也已经说了这种库和使用 OpenSSLlibssh2库编译的出来的libcurl库的区别。

4.2、使用 OpenSSL 和 libssh2库编译的出来的libcurl库

  • 先打开目录curl-7.83.1\curl-7.83.1\projects下的generate.bat文件生成配置环境:然后我选择VC12,这里是visual studio 2013来编译的。以下几种代表什么意思我上篇文章都有注明。
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第7张图片

  • 打开cur-all.sln解决方案文件:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第8张图片

  • 直接生成解决方案会报如下错误:
    在这里插入图片描述
    这是因为这样编译的话是要包含libssh2库文件才能编译通过。

  • libssh2官方地址:libssh2地址。我是下载的这个版本:下载链接。
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第9张图片

  • 下载好就会成这个样子:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第10张图片

  • 也是用cmake编译,这里和上面编译libcurl一样,不多说,编译出来的库,把libssh2.lib以及include头文件拷贝到你要编译使用libcurl的目录:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第11张图片

  • libcurl目录下新建一个libssh2文件存放库文件和头文件:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第12张图片

  • 然后在解决方案中这样操作:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第13张图片

  • 附加库目录:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第14张图片

  • 输入库目录,然后重新生成解决方案:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第15张图片

  • 再次报了如下错误,这个错误和上个错误是不是很熟悉,这是要包含openssl的库文件:
    在这里插入图片描述

  • openssl库下载地址:官方地址我下载的是这个地址:下载地址。这里的后缀有light和不加light是:注意,不要下载 light 版本,因为 light 版本不带库文件。
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第16张图片

  • 下载好里面文件有这些:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第17张图片
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第18张图片

  • 同样把库文件和头文件拷贝到libcul中的文件中去:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第19张图片

  • 同样在解决方案属性中增加头文件和库文件:
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第20张图片
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第21张图片

libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第22张图片

  • 再次重新生成解决方案出现了以下错误,是因为libcurl网络库还包含了libcryproto.lib密码学库和libcrld.lib
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第23张图片
  • 其中libcrypto.lib也是在openssl库文件里面的。直接拷贝过去即可。
    libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译_第24张图片
  • 再次生成解决方案出现如下错误,这是因为我这里使用的是libssh2.lib而不是libssh2d.lib,在属性里面删除掉即可:
    在这里插入图片描述
  • 再次生成解决方案完成编译:
    在这里插入图片描述

你可能感兴趣的:(libcurl网络库,网络,c++)