curl 是一个在命令行下使用 URL 语法进行数据传输的工具,支持 HTTP、HTTPS、FTP、FTPS、TELNET 等多种协议,常用于抓取网页内容、测试 API 接口和监控服务器状态。
Linux curl 用法示例
1. 抓取网页内容
抓取百度首页:
curl http://www.baidu.com
如果返回内容出现中文乱码,可以使用 iconv 命令进行转码:
curl http://iframe.ip138.com/ic.asp | iconv -f gb2312
关于 iconv 命令的详细用法,可参考相关文档处理文本文件的中文编码问题。
2. 使用代理服务器
通过 HTTP 代理抓取页面:
curl -x 111.95.243.36:80 http://iframe.ip138.com/ic.asp | iconv -f gb2312
curl -x 111.95.243.36:80 -U username:password http://www.baidu.com
通过 SOCKS 代理抓取页面:
curl --socks4 202.113.65.229:443 http://iframe.ip138.com/ic.asp | iconv -f gb2312
curl --socks5 202.113.65.229:443 http://iframe.ip138.com/ic.asp | iconv -f gb2312
代理服务器地址可从可靠的代理服务商处获取。
3. 处理 Cookies
接收并保存 Cookies 到文件:
curl -c /tmp/cookies http://www.baidu.com
发送 Cookies:
curl -b "key1=val1;key2=val2;" http://www.baidu.com
curl -b /tmp/cookies http://www.baidu.com
第一行命令直接发送 Cookie 字符串,第二行从文件中读取 Cookie 并发送。
4. 发送数据
使用 GET 方法提交数据:
curl -G -d "name=value&name2=value2" http://www.baidu.com
使用 POST 方法提交数据:
curl -d "name=value&name2=value2" http://www.baidu.com
curl -d a=b&c=d&txt@/tmp/txt http://www.baidu.com
以表单形式上传文件:
curl -F file=@/tmp/me.txt http://www.aiezu.com
这相当于设置了表单的 method="POST" 和 enctype='multipart/form-data' 属性。
5. HTTP 头部处理
设置 HTTP 请求头信息:
curl -A "Mozilla/5.0 Firefox/21.0" http://www.baidu.com
curl -e "http://pachong.org/" http://www.baidu.com
curl -H "Connection:keep-alivenUser-Agent: Mozilla/5.0" http://www.aiezu.com
设置并处理 HTTP 响应头:
curl -I http://www.aiezu.com
curl -D /tmp/header http://www.aiezu.com
第一行命令仅返回响应头,第二行将响应头保存到指定文件。
6. 认证
使用用户名密码进行基本认证:
curl -u username:password http://www.aiezu.com
使用客户端证书进行认证:
curl -E mycert.pem https://www.baidu.com
7. 其他常用选项
显示进度条:
curl -# http://www.baidu.com
将输出保存到文件:
curl -o /tmp/aiezu http://www.baidu.com