由于接下来要更多的和物联网云平台打交道。我考虑的一种实现方式是将业务代码和网络解析处理代码分离的模式。因此,有必要学习以下这一个优秀的网络请求库-libcurl。
1、libcurl简介
libcurl 是一个免费且易于使用的客户端 URL 传输库, 支持DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET和TFTP。libcurl 支持 SSL 证书、HTTP POST、HTTP PUT、FTP 上传、基于 HTTP 表单的上传、代理、HTTP/3、Cookie、用户/密码认证 (Basic, Digest, NTLM, Negotiate, Kerberos), 文件传输恢复、http隧道代理等等!
libcurl兼容许多平台, 包括Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS 等等。
libcurl 是免费的、线程安全的、IPv6 兼容的、功能丰富的、支持良好的、快速的、完整的文档并且已经被许多知名的、大的和成功的公司使用。
2、libcurl的使用
2.1、下载最新版本的libcurl
下载链接如下:
https://curl.se/download.html
2.2、在Linux下进行配置、编译和安装
(1)配置libcurl
怎么配置的话可以执行帮助指令查看配置选项:
./configure --help
libcurl的配置参数非常丰富,我们也可以将它进行交叉编译,在开发板上进行使用,为了简单能够测试,我的配置参数如下:
./configure --with-openssl
配置完以后,我们可以看到这里面有哪些功能开启,哪些功能没有开启。
(2)编译 & 安装
make & make install
2.3、编写libcurl样例
在libcurl官网上提供了大量的案例,在编写程序的过程中可以进行借鉴:
https://curl.se/libcurl/c/example.html
以下是我根据案例编写的一个从云端下载文件的demo:
#include <stdio.h> #include <string.h> #include <curl/curl.h> #include <unistd.h> #include "http-get.h" int main(int argc, char *argv[]) { if(argc != 3) { printf("usage: Less than 3 parameters\n"); printf("first parameters is url,second parameters is file name...\n"); return -1 ; } int res = http_get_file(argv[1],argv[2]); if(res != 0) { printf("file donwload fair!\n"); return -2 ; } return 0; }
编译及执行方法:
gcc http_get.c -o http_get -lcurl
从URL下载得到的文件:
3、引用 & 参考文献
(N.d.). Retrieved from https://curl.se/libcurl/c/example.html (N.d.). Retrieved from https://everything.curl.dev/libcurl (N.d.). Retrieved from https://www.jianshu.com/p/c19a3f34b033