cURL是什么

curl是Linux命令行工具,可以使用任何可支持的协议(如HTTP、FTP、IMAP、POP3、SCP、SFTP、SMTP、TFTP、TELNET、LDAP或FILE)在服务器之间传输数据。

在Linux下,curl是由libcurl 提供驱动封装的cli客户端,在libcurl驱动下,curl可以一次传输多个文件。而PHP中的cURL函数,也是基于libcurl驱动的。

curl由libcurl支持所有与传输相关的特性

cURL常用参数

参数 说明
-i 默认隐藏响应头,此选项打印响应头与
-I/--head 仅显示响应头
-o 将相应内容保存指定路径下
-O 将相应内容保存在当前工作目录下
-C 断点续传,在 crtl + c终端后,可以从中断后部分开始
-v 显示请求头与响应头
-x 使用代理
-X 指定请求方法,POST GET PUT DELETE等
-d 如GET/POST/PUT/DELETE 需要传的表单参数,如JSON格式
-u username:password 当使用ftp有用户名可以使用-u,ftp允许匿名用户访问可以忽略
–-limit-rate 2000B 限速
-T/--upload-file <file> 上传一个文件
-c/--cookie-jar <file name> 将cookie下载到文件内
-k/--insecure 允许执行不安全的ssl连接,即调过SSL检测
--header 'Host: targetapplication.com' 使用请求头
-L/--location 接受服务端redirect的请求
-F 上传二进制文件

下面整理了一些常用语法使用格式

cURL使用案例

限制下载速率

  1. curl --limit-rate 100K http://yourdomain.com/yourfile.tar.gz -O

使用代理访问

  1. curl --proxy yourproxy:port https://yoururl.com

限速访问

  1. curl www.baidu.com --limit-rate 1k

存储cookie和使用cookie

  1. [root@VM-0-2-centos ~]# curl --cookie-jar cnncookies.txt https://www.baidu.com/index.html -O -s -v
  2. * About to connect() to www.baidu.com port 443 (#0)
  3. * Trying 14.215.177.39...
  4. * Connected to www.baidu.com (14.215.177.39) port 443 (#0)
  5. * Initializing NSS with certpath: sql:/etc/pki/nssdb
  6. * CAfile: /etc/pki/tls/certs/ca-bundle.crt
  7. CApath: none
  8. * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  9. * Server certificate:
  10. * subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",OU=service operation department,L=beijing,ST=beijing,C=CN
  11. * start date: Apr 02 07:04:58 2020 GMT
  12. * expire date: Jul 26 05:31:02 2021 GMT
  13. * common name: baidu.com
  14. * issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
  15. > GET /index.html HTTP/1.1
  16. > User-Agent: curl/7.29.0
  17. > Host: www.baidu.com
  18. > Accept: */*
  19. >
  20. < HTTP/1.1 200 OK
  21. < Accept-Ranges: bytes
  22. < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
  23. < Connection: keep-alive
  24. < Content-Length: 2443
  25. < Content-Type: text/html
  26. < Date: Wed, 26 May 2021 12:14:41 GMT
  27. < Etag: "58860402-98b"
  28. < Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
  29. < Pragma: no-cache
  30. < Server: bfe/1.0.8.18
  31. * Added cookie BDORZ="27315" for domain baidu.com, path /, expire 1622117681
  32. < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
  33. <
  34. { [data not shown]
  35. * Connection #0 to host www.baidu.com left intact
  1. # Netscape HTTP Cookie File
  2. # http://curl.haxx.se/docs/http-cookies.html
  3. # This file was generated by libcurl! Edit at your own risk.
  4. .baidu.com TRUE / FALSE 1622117681 BDORZ 27315
  1. [root@VM-0-2-centos ~]# curl --cookie cnncookies.txt https://www.baidu.com -s -v -o /dev/null
  2. * About to connect() to www.baidu.com port 443 (#0)
  3. * Trying 14.215.177.39...
  4. * Connected to www.baidu.com (14.215.177.39) port 443 (#0)
  5. * Initializing NSS with certpath: sql:/etc/pki/nssdb
  6. * CAfile: /etc/pki/tls/certs/ca-bundle.crt
  7. CApath: none
  8. * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  9. * Server certificate:
  10. * subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",OU=service operation department,L=beijing,ST=beijing,C=CN
  11. * start date: Apr 02 07:04:58 2020 GMT
  12. * expire date: Jul 26 05:31:02 2021 GMT
  13. * common name: baidu.com
  14. * issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
  15. > GET / HTTP/1.1
  16. > User-Agent: curl/7.29.0
  17. > Host: www.baidu.com
  18. > Accept: */*
  19. > Cookie: BDORZ=27315
  20. >
  21. < HTTP/1.1 200 OK
  22. < Accept-Ranges: bytes
  23. < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
  24. < Connection: keep-alive
  25. < Content-Length: 2443
  26. < Content-Type: text/html
  27. < Date: Wed, 26 May 2021 12:23:27 GMT
  28. < Etag: "58860402-98b"
  29. < Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
  30. < Pragma: no-cache
  31. < Server: bfe/1.0.8.18
  32. * Replaced cookie BDORZ="27315" for domain baidu.com, path /, expire 1622118207
  33. < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ # 这里可以看到设置的cookie
  34. <
  35. { [data not shown]
  36. * Connection #0 to host www.baidu.com left intact

使用代理

  1. curl -x socks5://127.0.0.1:10808 https://www.google.com

使用application/x-www-form-urlencoded表单类型

这里使用的为application/x-www-form-urlencoded

  1. curl -d "option=value&something=anothervalue" -X POST https://{hostname}/

使用json格式作为body

  1. curl -H "Content-Type: application/json" -X POST https://host.com/ \
  2. -d '
  3. {
  4. "option": "value",
  5. "something": "anothervalue"
  6. }'

使用curl 上传文件

  1. curl {host}/api/v1/upimg -F "file=@/Users/fungleo/Downloads/401.png" \
  2. -H "token: 222" \
  3. -v

也可以指定MIME类型。如:

  1. curl -F 'file=@photo.png;type=image/png' https://{host}/api/v1/upimg

curl输出的格式变量

curl -w参数提供了一些格式变量,可以达到紧紧获取某些数据

仅获取http状态码

  1. curl -w %{http_code} www.baidu.com -o /dev/null -s

获取整个请求的时间

获取整个请求的耗时,单位秒,显示单位 毫秒

  1. curl -w %{time_total} www.baidu.com -o /dev/null -s

获取域名解析时间

  1. curl -w %{time_namelookup} www.baidu.com -o /dev/null -s

获取TCP连接耗时

  1. curl -w %{time_connect} www.baidu.com -o /dev/null -s

获取SSL/SSH握手到远程主机耗时

  1. curl -w %{time_appconnect} https://www.baidu.com -o /dev/null -s -v

获取所有重定向的耗时

这里是从查找、连接、传输整个事务的完成到开始传送数据之前的耗时

  1. curl -w %{time_redirect} www.baidu.com -o /dev/null -s

获得下载的总字节数

这里是http相应的body长度,而不是加上头部的大小

  1. curl -w %{size_download} www.baidu.com -o /dev/null -s
  1. [root@VM-0-2-centos ~]# curl -w %{size_download} www.baidu.com -o /dev/null -s
  2. 2381
  3. [root@VM-0-2-centos ~]# cwww.baidu.com -s|wc l -s
  4. 2 159 2381

获得请求体送字节数

  1. curl -w %{size_request} www.baidu.com -o /dev/null -s

获得传输中的连接数

  1. curl -w %{num_connects} www.baidu.com -o /dev/null -s

获得重定向次数

  1. curl -w %{num_redirects} www.360buy.com -o /dev/null -s -L

获得SSL验证结果

0 表示是成功的

  1. curl -w %{ssl_verify_result} https://www.baidu.com -o /dev/null -s -L

获得重定向的地址

当没有指定-L时,会返回被重定向后的地址

  1. curl -w %{redirect_url} https://www.360buy.com -o /dev/null -s

获得上传和下载速度

  1. curl -w %{speed_download} https://www.360buy.com -o /dev/null -s
  2. curl -w %{speed_upload} https://www.360buy.com -o /dev/null -s

根据自己需要拼接特定格式

  1. curl -w "总共请求时长:%{time_total}\n总跳转次数:%{num_redirects}\n" \
  2. www.360buy.com \
  3. -o /dev/null -s \
  4. -L
  5. 总共请求时长:1.338
  6. 总跳转次数:3

cURL命令使用指南的更多相关文章

  1. curl 命令行应用

    我一向以为,curl只是一个编程用的函数库. 最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法. =================================== ...

  2. curl网站开发指南

    我一向以为,curl只是一个编程用的函数库. 最近才发现,这个命令本身,就是一个无比有用的网站开发工具,请看我整理的它的用法. =================================== ...

  3. [转帖]curl 的用法指南

    curl 的用法指南   作者: 阮一峰 日期: 2019年9月 5日 感谢 腾讯课堂NEXT学院 赞助本站,腾讯官方的前端课程 免费试学. http://www.ruanyifeng.com/blo ...

  4. [转帖]curl网站开发指南

    curl网站开发指南 http://www.ruanyifeng.com/blog/2011/09/curl.html linux 里面有非常多很好的工具 比如这个 curl 之前 以为 wget 就 ...

  5. curl命令,curl实现post,curl监控网页shell脚本,curl多进程实现并控制进程数,

    cURL > Docs > Tutorial:  http://curl.haxx.se/docs/httpscripting.html 下载单个文件,默认将输出打印到标准输出中(STDO ...

  6. curl命令使用

    curl命令可以用来构造http请求.参数有很多,常用的参数如下: 通用语法:curl [option] [URL...]在处理URL时其支持类型于SHELL的名称扩展功能,如http://www.j ...

  7. curl命令行使用

    curl 命令使用   原文地址:http://blog.sina.com.cn/s/blog_4b9eab320100slyw.html 可以看作命令行浏览器 1.开启gzip请求curl -I h ...

  8. CURL命令报错:dyld: lazy symbol binding failed: Symbol not found: _SSL_load_error_strings解决办法

    Mac OS X 10.11.6, curl 命令报错,错误如下: dyld: lazy symbol binding failed: Symbol not found: _SSL_load_erro ...

  9. CURL命令详解

    curl命令是一个强大的网络工具,它能通过http,ftp等方式下载.上传文件.其中curl远不止这些功能,大家可以通过阅读手册获取更多的信息,类似的工具还有wget. curl命令使用了libcur ...

随机推荐

  1. 一文搞懂:java中的VO、PO、BO、DAO、POJO

    针对java工程里的各种带O的对象,进行分析,了解各自的作用. PO:persistent object,持久对象.与数据库里表字段一一对应.PO是一些属性,以及set和get方法组成.一般情况下,一 ...

  2. 在Windows上使用 Python 安装+ win10启用长路径

    https://docs.python.org/zh-cn/3/using/windows.html 成功20200131 https://docs.python.org/zh-cn/3/using/ ...

  3. 9.7 top:实时显示系统中各个进程的资源占用状况

    top命令 用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况.该命令可以按照CPU的使用.内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式 ...

  4. Centos7 LVM管理的逻辑卷根目录扩容和/var目录扩容

    Centos7 LVM管理的逻辑卷根目录扩容 fdisk /dev/sdb #对新加磁盘进行分区操作pvcreate /dev/sdb1 #创建一个物理卷vgs #查看现有的卷组vgextend ce ...

  5. docker存储驱动

    http://www.sohu.com/a/101016494_116235 https://success.docker.com/article/compatibility-matrix Red H ...

  6. STM8的AIR与STM32的Keil的指定地址存数据

    [经验分享]KE02在IAR和KEIL中以常量形式初始化EEPROM值一, 经验分享描述        写这篇经验分享的原因是,之前有一个客户,他希望在KE02的芯片中,不要出现使用EEPROM操作命 ...

  7. Servlet中的过滤器和监听器

    1.什么是过滤器? Servlet规范中定义的一种特殊的组件,用来拦截容器的调用过程.容器收到请求之后,首先调用过滤器,然后再调用Servlet 2.生命周期: 1.servlet:servlet的生 ...

  8. 云原生ASP.NET Core程序的可监测性和可观察性

    分布式应用程序很复杂,给开发人员调试和修复生产问题带来了一系列挑战.尽管微服务架构可帮助维持一支规模较小,可以自主工作并专注于独立业务团队,但由于其分布式性质,它带来了新的挑战.例如,在业务交易过程中 ...

  9. 也谈如何写一个Webserver(三)

    在上一篇里,我介绍了如何应用socket和epoll来组织和管理从客户端(如,浏览器)传入的连接,通过设置非阻塞连接让Webserver有更好的性能. 下面,我介绍一下在我写的Webserver Ma ...

  10. Spring AOP开发时如何得到某个方法内调用的方法的代理对象?

    Spring AOP开发时如何得到某个方法内调用的方法的代理对象? 问题阅读起来拗口,看代码 在方法中调用其他方法很常见,也经常使用,如果在一个方法内部调用其他方法,比如 public class U ...