cURL工具的使用技巧

Posted on

cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。 – Baidu

0x01 cURL支持的协议

DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP

Ref:https://ec.haxx.se/protocols-curl.html

0x02 常用选项

  • 查看详细信息:curl -v http://example.com
  • 跟随重定向: curl -L http://example.com
  • 发送POST数据:curl -d "username=Rvn0xsy" http://example.com
  • 下载文件:curl -o ~/Download/down.zip http://example.com/download.zip
  • 查看进度表: curl -s -o ~/Download/down.zip http://example.com/download.zip
  • 下载并覆盖本地副本:curl -O ~/Download/down.zip http://example.com/download.zip
  • 限速:curl http://example.com/ --limit-rate 200K
  • 最大文件大小:curl --max-filesize 100000 http://example.com/
  • 偏移读取:curl --range 100-1099 http://example.com/download.zip
  • URL编码:curl --data-urlencode "name=John Doe (Junior)" http://example.com
  • URL编码-从文件读取:curl --data-urlencode user@contents.txt http://example.com #user的内容再contents.txt中
  • GET请求:curl -G http://example.com
  • 添加请求头:curl -H "Transfer-Encoding: chunked" http://example.com
  • 自定义user-agent:curl --user-agent/-A/-H 'User-Agent: http://example.com'

0x03 认证

cURL支持四种认证:

  • –digest
  • –negotiate
  • –ntlm
  • -u <username:password>

0x04 任意HTTP方法

cURL -X <POST/GET/OPTIONS/PUT> http://example.com

0x04 上传文件

支持:FILE, FTP, FTPS, HTTP, HTTPS, IMAP, IMAPS, SCP, SFTP, SMB, SMBS, SMTP, SMTPS and TFTP.

HTTP:curl -T upload.zip http://example.com/ # PUT

FTP:curl -T upload.zip ftp://example.com/

SMTP:curl -T mail smtp://mail.example.com/ --mail-from user@example.com

0x05 网卡

curl --interface eth1 https://www.example.com/

curl --interface 192.168.0.2 https://www.example.com/

curl --interface machine2 https://www.example.com/

0x06 指定源端口

curl --local-port 4000-4200 https://example.com/

0x07 代理

支持代理:

  • http
  • socks
curl -x 192.168.0.1:8080 http:/example.com/
curl -x socks4://proxy.example.com http://www.example.com/
curl --socks4 proxy.example.com http://www.example.com/
curl --socks4a proxy.example.com http://www.example.com/
curl -x socks4a://proxy.example.com http://www.example.com/
curl -x socks5://proxy.example.com http://www.example.com/
curl --socks5 proxy.example.com http://www.example.com/
curl -x socks5h://proxy.example.com http://www.example.com/
curl --socks5-hostname proxy.example.com http://www.example.com/

代理认证

curl -U daniel:secr3t -x myproxy:80 http://example.com

0x08 HTML表单上传文件

<form action="submit.cgi" method="post" enctype="multipart/form-data">
   Name: <input type="text" name="person"><br>
   File: <input type="file" name="secret"><br>
   <input type="submit" value="Submit">
</form> 

curl -F person=anonymous -F secret=@file.txt http://example.com/submit.cgi

读取cookie

curl -L -b cookies.txt http://example.com

将cookie写入文件

curl -c cookie-jar.txt http://example.com

REF

  • https://legacy.gitbook.com/book/bagder/everything-curl