1. 抓取页面内容到文件
使用 -o 选项可以将 URL 内容保存到指定文件。
curl -o home.html http://www.baidu.com
上述命令将百度首页内容保存到当前目录的 home.html 文件中。
对于批量下载且需要自定义文件名的情况,可以使用 # 占位符。例如:
curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{A,B}/[001-201].JPG
此命令会下载两个目录(A 和 B)中编号 001 到 201 的 JPG 文件。下载后,文件命名规则为 序号-目录名.JPG(例如 001-A.JPG 和 001-B.JPG),从而避免重名。
2. 使用 -O 选项下载文件
使用 -O(大写 O)选项,可以 URL 中的文件名将内容保存到当前目录。URL 必须指向具体的文件。
curl -O http://www.baidu.com/img/bdlogo.gif
执行后会在当前目录生成 bdlogo.gif 文件。
同样支持使用正则表达式进行批量下载:
curl -O http://example.com/screen[1-10].JPG
此命令会下载 screen1.jpg 到 screen10.jpg 十个文件。
3. 模拟登录与 Cookie 管理
保存 Cookie 到文件
使用 -c(小写)选项可以将服务器返回的 Cookie 保存到文件。
curl -c ./cookie_c.txt -F log=username -F pwd=password http://example.com/wp-login.php
保存 HTTP 响应头到文件
使用 -D 选项可以将完整的 HTTP 响应头(包括 Set-Cookie)保存到文件。
curl -D ./cookie_D.txt -F log=username -F pwd=password http://example.com/wp-login.php
注意:-c 保存的是解析后的 Cookie 数据,而 -D 保存的是原始的 HTTP 头信息,两者格式不同。
使用 Cookie 文件访问
使用 -b 选项可以读取之前保存的 Cookie 文件,用于维持登录状态访问后续页面。
curl -b ./cookie_c.txt http://example.com/wp-admin
4. 断点续传
使用 -C - 选项可以实现断点续传。如果文件已部分下载,curl 会从中断处继续下载。
curl -C - -O http://www.baidu.com/img/bdlogo.gif
5. 发送 POST 数据
使用 -d 选项可以发送 POST 请求数据。常用于模拟表单提交。
curl -d "log=username" http://example.com/wp-login.php
服务器处理后会返回响应内容,可用于验证提交是否成功。
6. 显示错误信息
使用 -f 选项时,如果服务器返回 HTTP 错误状态码(如 404、500),curl 会以非零状态退出并显示简洁的错误信息。
curl -f http://example.com/asdf
# 输出示例:curl: (22) The requested URL returned error: 404
若不使用 -f 选项,curl 会输出服务器返回的错误页面 HTML 内容。
7. 伪造 Referer
使用 -e 或 --referer 选项可以设置 HTTP Referer 头,用于绕过一些防盗链检查。
curl -e http://localhost http://example.com/wp-login.php
8. 使用代理
当 IP 被限制时,可以通过 -x 选项使用代理服务器。
curl -x 192.168.1.1:8080 -o home.html http://example.com
9. 分段下载大文件
使用 -r 选项可以指定下载文件的字节范围,用于分段下载或并行下载。
# 下载 0-100 字节
curl -r 0-100 -o img.part1 http://example.com/largefile.jpg
# 下载 100-200 字节
curl -r 100-200 -o img.part2 http://example.com/largefile.jpg
# 下载从 200 字节到文件末尾
curl -r 200- -o img.part3 http://example.com/largefile.jpg
下载完成后,可以使用 cat 命令合并文件:
cat img.part* > complete_img.jpg
10. 控制输出信息
静默模式
使用 -s 选项可以隐藏进度信息和错误信息。
curl -s -o logo.jpg http://www.baidu.com/img/bdlogo.gif
显示进度条
使用 -0(数字零)选项强制使用 HTTP/1.0 协议,并会显示一个简单的进度条。
curl -0 http://www.baidu.com/img/bdlogo.gif
11. FTP 操作
FTP 下载
使用 -u 选项指定用户名和密码进行 FTP 下载。
curl -u username:password -O ftp://example.com/demo/style.css
# 或使用 URL 内嵌凭证的格式
curl -O "ftp://username:password@example.com/demo/style.css"
FTP 上传
使用 -T 选项上传文件到 FTP 服务器。
curl -T localfile.sql "ftp://username:password@example.com/demo/"
12. 设置 HTTP 头部
模拟浏览器 User-Agent
使用 -A 选项可以设置 User-Agent 字符串。
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" -o page.html http://www.baidu.com
13. HTTP 方法:GET、POST 与 PUT
GET 请求
GET 请求的参数通常附加在 URL 后。
curl "http://example.com/login.cgi?user=nick&password=12345"
POST 请求
使用 -d 选项发送 POST 请求体数据。
curl -d "user=nick&password=12345" http://example.com/login.cgi
PUT 请求
使用 -T 选项可以发送 PUT 请求,通常用于上传文件。
curl -T localfile http://example.com/upload.cgi
上传文件(multipart/form-data)
模拟包含文件上传的表单,需使用 -F 选项。
curl -F "upload=@localfile" -F "nick=go" http://example.com/up_file.cgi
其中 @localfile 表示上传名为 localfile 的文件,字段名 upload 需与表单定义一致。