curl 工具详解

533 阅读3分钟

curl 概述

  • c = see
  • see curl = curl

curl是一个非常强大的工具,不仅支持命令行方式,也支持脚本和自动化工具, 来发送网络请求,并展示返回的数据。

官网和相关文档

curl 可以做什么

  • curl 工具: 不仅支持命令行,也支持脚本或者自动化工具

  • libcurl: C 语言编写的跨平台网络库, 支持

    • 任何平台、
    • 任何体系结构
    • 任何目的的任何人自由使用. 自由宽松的 MIT 开源协议 curl.se/docs/copyri…

版本

curl 安全问题修复

curl.se/docs/securi…

项目结构

  • 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 网页的请求

图片.png

Charles

  • 支持查看、编辑和重发 curl 命令
  • Charles 可以抓取 PC 和移动设备所有的网络请求,

图片.png

Postman

  • import curl 作为 Raw text 到 postman 中
  • 修改 curl 的各项参数

图片.png