curl7 命令行使用
HTTP 协议
访问 IPv6 地址
curl http://[fe80::79c8:7bd1:cf97:aef3%8]:80
使用代理
curl --socks5-hostname 127.0.0.1:19996 http://www.google.com/
curl -x socks5://127.0.0.1:19996 http://www.google.com/
retry 设置重试次数
curl --url http://www.google.com/ --retry 3
-X 指定请求方法
curl -X post localhost:7777/ping
为特定主机和端口对提供自定义地址
curl --resolve example.com:7777:127.0.0.1 http://example.com:7777/ping
-L 跟随重定向, 用 Location: 标头和 3XX 响应代码表示
curl -L 127.0.0.1:7777/ping
-v 打印请求的详细信息,与之相反的是 -s
curl -v http://example.com
输出比-v还详细的信息
curl --trace dump.txt http://example.com
-w 写入自定义信息, https://everything.curl.dev/usingcurl/verbose/writeout
curl -w "\nType: %{content_type}\nCode: %{response_code}\n" http://127.0.0.1:7777/ping
ok
Type: text/plain; charset=utf-8
Code: 200
-o, --output <file> 将输出写入 <file> 而不是 stdout
curl --url 127.0.0.1:7777/ping -o o.txt
如果文件存在则默认覆盖,--no-clobber 可以避免
curl --url 127.0.0.1:7777/ping --no-clobber -o o.txt
将输出写入与我们获取的远程文件同名的本地文件。 (只使用了远程文件的文件部分,路径被截掉了。)
curl -O 127.0.0.1:7777/ping
-H, --header <header/@file> 向服务器发送 HTTP 时要包含在请求中的额外标头
curl -H "X-First-Name: Joe" 127.0.0.1:7777/ping
-I, --head (HTTP FTP 文件)只获取标题
curl -I 127.0.0.1:7777/ping
--data-raw <data> posts data 发送原始数据
curl --data-raw '{"name": "ajanuw"}' -H 'Content-type: application/json' 127.0.0.1:7777/ping
curl -d @file.json -H 'Content-type: application/json' 127.0.0.1:7777/ping
-d, --data <data> 使用内容类型 application/x-www-form-urlencoded 将数据传递到服务器
curl -d 'name=ajanuw&age=12' 127.0.0.1:7777/ping
-F, --form <name=content> 使用 Content-Type multipart/form-data 来发布数据
curl -F profile=@portrait.jpg https://example.com/upload.cgi
curl -F name=John -F shoesize=11 https://example.com/
读取文件中的内容,而不是上传
curl -F "story=<hugefile.txt" https://example.com/
显示设置文件名
curl -F "file=@localfile;filename=nameinpost" example.com
-G, --get 此选项将使所有使用 -d、--data、--data-binary 或 --data-urlencode 指定的数据用于 HTTP GET 请求
curl -G -d 'name=ajanuw&age=12' 127.0.0.1:7777/ping
SFTP 协议
列出目录
curl -k "sftp://192.168.149.128" --user "root:123"
curl -k "sftp://192.168.149.128/root/" --user "root:123"
可以根据scheme猜测要使用哪个协议
curl -u root:123 sftp://192.168.149.128/root/
嵌入一个可能的用户名和密码字段
curl sftp://root:123@192.168.149.128/root/
指定端口号22
curl sftp://root:123@192.168.149.128:22/root/
(上传)将本地的文件上传到服务器的 /root/目录下
curl -k "sftp://192.168.149.128/root/" --user "root:123" -T "./o.txt"
(上传)目录不存在加上 --ftp-create-dirs
curl -k "sftp://192.168.149.128/root/newdir/" --user "root:123" -T "./o.txt" --ftp-create-dirs
(下载)服务器上的/root/o.txt下载到本地u.txt
curl -k "sftp://192.168.149.128/root/o.txt" --user "root:123" -o "./u.txt"
(下载)使用-o选项当目录不存在时可以使用--create-dirs创建目录
curl -k "sftp://192.168.149.128/root/o.txt" --user "root:123" -o "./d/u.txt" --create-dirs
-Q, --quote
向远程 FTP 或 SFTP 服务器发送任意命令
要在成功传输后执行命令,请在它们前面加上破折号“-”
如果服务器为其中一个命令返回失败,则整个操作将中止
该选项可以多次使用。 当与 FTP 服务器通话时,在命令前加上星号 (*) 以使 curl 继续,即使命令失败也是如此,因为默认情况下 curl 将在第一次失败时停止。
SFTP 引用命令的列表:
chgrp group file
chgrp 命令将文件操作数命名的文件的组 ID 设置为组操作数指定的组 ID。 组操作数是十进制整数组 ID
chmod mode file
chmod命令修改指定文件的文件模式位。模式操作数是八进制整数模式数
chown user file
chown命令将文件操作数命名的文件的所有者设置为用户操作数指定的用户ID。用户操作数是十进制整数用户ID
ln source_file target_file
ln和symlink命令在target_file位置创建指向source_file位置的符号链接
mkdir directory_name
mkdir命令创建由directory_name操作数命名的目录
创建 /root/sftp_newdir/ 目录
curl -k "sftp://192.168.149.128/root/" --user "root:123" -Q '-mkdir sftp_newdir'
pwd
pwd命令返回当前工作目录的绝对路径名
rename source target
rename命令将源操作数命名的文件或目录重命名为目标操作数指定的目标路径
从命名服务器上/root/目录下的文件
curl -k "sftp://192.168.149.128/root/" --user "root:123" -Q '-rename o.txt newname.txt'
curl -k "sftp://192.168.149.128/root/" --user "root:123" -Q '-rename newdir/o.txt newdir/newname.txt'
rm file
rm命令删除文件操作数指定的文件
rmdir directory
rmdir命令删除由目录操作数指定的目录条目,前提是该条目为空
删除 /root/sftp_newdir/ 目录
curl -k "sftp://192.168.149.128/root/" --user "root:123" -Q '-rmdir sftp_newdir'
symlink source_file target_file
文件连接
FILE 协议
FILE实际上不是“网络”协议。它是一种URL方案,允许您告诉curl从本地文件系统获取文件,而不是通过网络从远程服务器获取文件
curl file:///root/oo/README.md
使用配置文件
避免控制台输入太长
curl -K curl_config.txt
cat curl_config.txt
-X POST
--url 127.0.0.1:7777/ping
-d 'msg=hello'
电子邮件协议
-
(读)POP3 从服务器检索电子邮件的协议, POP3服务器和客户端使用
TCP端口110
。虽然到服务器的连接以明文形式开始,但客户端可以使用STLS命令显式请求升级连接,从而支持SSL/TLS通信 -
(读)POP3S 是通过SSL/TLS连接进行的POP3。这样的连接隐式地使用SSL/TLS开始,因此服务器和客户端使用
TCP端口995
来彼此通信 -
(读)IMAP 是一种用于访问、控制和“读取”电子邮件的协议, IMAP服务器和客户端使用
TCP端口143
。虽然到服务器的连接以明文形式开始,但客户端可以使用STARTTLS命令显式请求升级连接,从而支持SSL/TLS通信 -
(读)IMAPS 是通过SSL/TLS连接完成的IMAP。这样的连接隐式地使用SSL/TLS开始,因此服务器和客户端使用
TCP端口993
彼此通信 -
(写)SMTP 是一种电子邮件传输协议, SMTP服务器和客户端使用
TCP端口25
。虽然到服务器的连接以明文形式开始,但客户端可以使用STARTTLS命令显式请求升级连接,从而支持SSL/TLS通信 -
(写)SMTPS 是通过SSL/TLS连接完成的SMTP。这样的连接隐式地使用SSL/TLS开始,并且这样的服务器和客户端使用
TCP端口465
来彼此通信
curl pop3://<host> -u '<用户名>:<密码>'
curl --resolve example.com:110:127.0.0.1 pop3://lisi.example.com/ -u 'lisi@example.com:123'
1 1608
2 1496
3 327
下载第3条消息,通常最新的会排在最后面
curl --resolve example.com:110:127.0.0.1 pop3://lisi.example.com/3 -u 'lisi@example.com:123'
删除消息1
curl pop3://smtp.qq.com/1 -u '1641845087@qq.com:123' --ssl --request DELE
从 mailbox Drafts中获取索引为1的邮件
curl 'imap://smtp.qq.com/Drafts;MAILINDEX=1' -u '1641845087@qq.com:123' --ssl
See also: