curl
curl 是 libcurl 库的命令行接口,他提供了所有与传输相关的功能。更具体的说就是提供了对应用层的一系列协议提供了支持,例如 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、WS 和 WSS。
基本使用
基本的语法是:
URL
所有上面的协议都提供了对应的 URL 语法,具体由RFC3986规范规定。通常就是 protocol://user:passwd@host:port/path?key=value#fragment
这样的形式。
可以包含多个 url,他们会根据顺序下载
options
curl 提供了众多的参数来控制行为。
output
默认情况下 curl 会讲结果输出到 stdout 中,有两个参数可以改变这个行为:
Bash
-o/--output file # 指定要保存到的文件, 可以是路径
-O/--remote-name # 使用远程服务器上的文件名
--output-dir <dir> # -o/-O 命令将保存到的文件夹,默认是本地文件
注意
-o
也可以指定路径,--output-dir 更多的是为了-O
http/https 相关
这个是使用最多的协议。
Bash
-x proxy_http/socks -U user:passwd # 指定代理, -U 指定代理 身份验证
-d data # POST 协议的 body "name=Rafael%20Sagula&phone=3320780"
--data-urlencode data # 同样是 POST 的 body 不过自动帮你转义 "name=Rafael Sagula&phone=3320780"
-A 'Mozilla/3.0 (Win95; I)' # 指定 User-Agent
-b "key=value" # 指定 cookie, 也可以是 -b cookies.txt 即从文件中获取
--dump-header # 在后续回话中使用之前收到的 cookie
-c cookies.txt # 保存获取的 cookie 到文件
-H "Host: example.com" # 指定请求头,注意可以指定多个
浏览器的 DevTools 能够直接复制 curl 格式的下载链接