基础

参考:

参数一览

  1. # 调试类
  2. -v, --verbose 输出信息
  3. -q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效,这个参数会影响到 -K, --config -A, --user-agent -e, --referer
  4. -K, --config FILE 指定配置文件
  5. -L, --location 跟踪重定向 (H)
  6. # CLI显示设置
  7. -s, --silent Silent模式。不输出任务内容
  8. -S, --show-error 显示错误. 在选项 -s 中,当 curl 出现错误时将显示
  9. -f, --fail 不显示 连接失败时HTTP错误信息
  10. -i, --include 显示 response的header (H/F)
  11. -I, --head 仅显示 响应文档头
  12. -l, --list-only 只列出FTP目录的名称 (F)
  13. -#, --progress-bar 以进度条 显示传输进度
  14. # 数据传输类
  15. -X, --request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST
  16. -H, --header <header> 设定 request里的header 例如 -H "Content-Type: application/json"
  17. -e, --referer 设定 referer (H)
  18. -d, --data <data> 设定 http body 默认使用 content-type application/x-www-form-urlencoded (H)
  19. --data-raw <data> ASCII 编码 HTTP POST 数据 (H)
  20. --data-binary <data> binary 编码 HTTP POST 数据 (H)
  21. --data-urlencode <data> url 编码 HTTP POST 数据 (H)
  22. -G, --get 使用 HTTP GET 方法发送 -d 数据 (H)
  23. -F, --form <name=string> 模拟 HTTP 表单数据提交 multipart POST (H)
  24. --form-string <name=string> 模拟 HTTP 表单数据提交 (H)
  25. -u, --user <user:password> 使用帐户,密码 例如 admin:password
  26. -b, --cookie <data> cookie 文件 (H)
  27. -j, --junk-session-cookies 读取文件中但忽略会话cookie (H)
  28. -A, --user-agent user-agent设置 (H)
  29. # 传输设置
  30. -C, --continue-at OFFSET 断点续转
  31. -x, --proxy [PROTOCOL://]HOST[:PORT] 在指定的端口上使用代理
  32. -U, --proxy-user USER[:PASSWORD] 代理用户名及密码
  33. # 文件操作
  34. -T, --upload-file <file> 上传文件
  35. -a, --append 添加要上传的文件 (F/SFTP)
  36. # 输出设置
  37. -o, --output <file> 将输出写入文件,而非 stdout
  38. -O, --remote-name 将输出写入远程文件
  39. -D, --dump-header <file> 将头信息写入指定的文件
  40. -c, --cookie-jar <file> 操作结束后,要写入 Cookies 的文件位置

基础应用

Get请求

不带有任何参数时,curl 就是发出 GET 请求。

  1. curl https://www.example.com

设置cookie

附带cookie请求

  1. curl -b 'foo=bar' https://google.com
  2. # 带多个cookie
  3. curl -b 'foo1=bar' -b 'foo2=baz' https://google.com
  4. # 读取文件里的cookie
  5. curl -b cookies.txt https://www.google.com

将返回的cookie写入文件

  1. curl -c cookies.txt https://www.google.com

Post-form请求

使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST。

  1. curl -d 'login=emma&password=123'-X POST https://google.com/login
  2. # 读取文件
  3. curl -d '@data.txt' https://google.com/login

post-json请求

  1. curl -H "Content-type:application/json" -X POST -d '{"threads_start":1,"threads_to":30}' http://127.0.0.1:9898

下载文件

  1. # 下载并使用原始名称
  2. curl -O http://www.mydomain.com/linux/index.html
  3. # 下载并使用自定义名称
  4. curl -o index.html http://www.mydomain.com/linux/index.html
  5. # 断点续传 ,加C
  6. curl -C -O http://www.sina.com.cn

登录并访问

  1. # 登录
  2. curl -c ./cookie_c.txt -F log=aaaa -F pwd=****** http://blog.mydomain.com/login.php
  3. # 根据cookie,再请求页面
  4. curl -b ./cookie_c.txt http://blog.mydomain.com/wp-admin

其他问题

如何支持https

默认的curl不支持https,重新安装即可。

首先我们先看一下curl支持什么协议

  1. ➜ curl -V
  2. curl 7.65.3 (x86_64-pc-linux-gnu) libcurl/7.65.3 zlib/1.2.7
  3. Release-Date: 2019-07-19
  4. Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp
  5. Features: AsynchDNS IPv6 Largefile libz UnixSockets

可以看到,协议里面没有https,我们下载安装

1、安装openssl

  1. wget https://www.openssl.org/source/old/1.1.0/openssl-1.1.0f.tar.gz
  2. tar -zxvf openssl-1.1.0f.tar.gz
  3. cd openssl-1.1.0f/
  4. ./config shared no-zlib --prefix=/opt/ssl --openssldir=/opt/ssl
  5. make
  6. sudo make install

2、安装curl

  1. wget https://curl.haxx.se/download/curl-7.54.1.tar.gz
  2. tar -zxvf curl-7.54.1.tar.gz
  3. cd curl-7.54.1
  4. LDFLAGS="-Wl,-rpath,/opt/ssl/lib -Wl,-rpath,/opt/lib \
  5. -Wl,-rpath,/usr/local/lib" \
  6. ./configure --with-ssl=/opt/ssl --prefix=/opt
  7. make
  8. sudo make install
  9. # 备份和软连接
  10. sudo mv /usr/local/bin/curl /usr/local/bin/curl.back
  11. sudo ln -s /opt/bin/curl /usr/local/bin/curl
  12. # 测试
  13. curl -V

这短短的一生我们最终都会失去,不放大胆一点,爱一个人、攀一座山、追一个梦!