curl 概述
- c = see
- see curl = curl
curl是一个非常强大的工具,不仅支持命令行方式,也支持脚本和自动化工具, 来发送网络请求,并展示返回的数据。
官网和相关文档
curl 可以做什么
-
curl 工具: 不仅支持命令行,也支持脚本或者自动化工具
-
libcurl: C 语言编写的跨平台网络库, 支持
- 任何平台、
- 任何体系结构
- 任何目的的任何人自由使用. 自由宽松的 MIT 开源协议 curl.se/docs/copyri…
版本
- 最新版本 7.80.0
- curl.se/docs/releas…
- curl.se/snapshots
curl 安全问题修复
项目结构
- lib 目录: libcurl的完整源代码
- lib/vtls: 支持各种 tls 协议库
OpenSSL: (目前为止)最流行的 TLS 库.
BoringSSL: 由谷歌维护的 OpenSSL 分支.它使 libcurl 缺少库中的某些功能进而禁用一些特征.
LibreSSL: OpenSSD 团队维护的 OpenSSL 分支.
NSS: 一个完整的 TLS 库,它最可能被 Firefox Web 浏览器使用.这是默认的 TLS 后端,用于 Fedora 和 ReHAT 系统的 curl.
GnuTLS: 一个完整的 TLS 库,Debian 默认情况下使用的封装 curl.
mbedTLS: (以前称为 PolarSSL)是一个针对嵌入式市场的 TLS 库.
WolfSSL: (以前称为 cyaSSL)是一个面向嵌入式市场的 TLS 库.
axTLS: 一个微小的 TLS 库,侧重于一个小的占地面积.
Schannel: 在 Windows 上的本地 TLS 库.
SecureTransport: Mac OS X 上的本地 TLS 库.
GSKit: OS/400 上的本地 TLS 库.
- src 目录: curl 命令行工具的源代码
- include/curl: libcurl 头文件目录
- docs: curl 和 libcurl 文档信息
curl支持的协议
FILE: 本地文件协议, 从本地读取文件
FTP: 普通文件传输协议
FTPS: SSL/TLS安全FTP协议
SFTP: SSH文件传输协议
HTTP、HTTPS:超文本传输协议
IMAP、IMAPS、POP3: 邮件传输协议
RTMP: 实时消息协议, 用于传输音频、视频和数据的协议
RTSP: 实时流协议, 用于控制流媒体服务器的网络控制协议
SCP: 安全复制(SCP)协议被设计为将文件复制到远程SSH服务器
curl 基本使用
- 输出通信的整个过程,用于调试。
curl -v http://www.baidu.com
- trace 和 trace-ascii 查看数据传输的过程
curl --trace dump.txt http://www.baidu.com
- 查看 curl 支持的功能和选项
curl --manual
- 下载内容和文件
curl www.baidu.com > test.html
- 上传
https://daichangya.github.io/everything-curl/#/book/usingcurl-uploads.zh
其他选项和功能
- 指定 HTTP 请求的方法。
curl -X POST https://www.example.com
上面命令对 www.example.com 发出 POST 请求。
- 添加 HTTP 请求的标头。
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://baidu.com
- 设置客户端的用户代理,即User-Agent。
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://baidu.com
curl -H 'User-Agent: macos/11.6.1' https://baidu.com
- 设置 POST 请求的数据体。
curl -d 'login=emma&password=123'-X POST https://baidu.com/login
- url encode
curl --data-urlencode 'comment=hello world' https://baidu.com/login
上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。 data-urlencode 等同于-d,区别在于会自动将发送的数据进行 URL 编码。
支持 curl 的工具
不止命令行支持 curl, 如下工具也支持查看、复制和发送 curl 命令
浏览器(Chrome Firefox Safari)
- 支持查看、编辑和重发 curl 命令
- 只支持抓取 web 网页的请求
Charles
- 支持查看、编辑和重发 curl 命令
- Charles 可以抓取 PC 和移动设备所有的网络请求,
Postman
- import curl 作为 Raw text 到 postman 中
- 修改 curl 的各项参数