curl(http命令行工具):Linux下最强大的网络数据传输工具

简介: curl(http命令行工具):Linux下最强大的网络数据传输工具

Linux curl(概要)

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。


语法

curl [option] [url]

常见参数

  • -A/–user-agent 设置用户代理发送给服务器
  • -b/–cookie  cookie字符串或文件读取位置
  • -c/–cookie-jar 操作结束后把cookie写入到这个文件中
  • -C/–continue-at 断点续转
  • -D/–dump-header 把header信息写入到该文件中
  • -e/–referer 来源网址
  • -f/–fail 连接失败时不显示http错误
  • -o/–output 把输出写到该文件中
  • -O/–remote-name 把输出写到该文件中,保留远程文件的文件名
  • -r/–range 检索来自HTTP/1.1或FTP服务器字节范围
  • -s/–silent 静音模式。不输出任何东西
  • -T/–upload-file 上传文件
  • -u/–user  设置服务器的用户和密码
  • -w/–write-out [format] 什么输出完成后
  • -x/–proxy  在给定的端口上使用HTTP代理
  • -#/–progress-bar 进度条显示当前的传送状态
  • -a/–append 上传文件时,附加到目标文件
  • –anyauth 可以使用“任何”身份验证方法
  • –basic 使用HTTP基本验证
  • -B/–use-ascii 使用ASCII文本传输
  • -d/–data HTTP POST方式传送数据
  • –data-ascii 以ascii的方式post数据
  • –data-binary 以二进制的方式post数据
  • –negotiate 使用HTTP身份验证
  • –digest 使用数字身份验证
  • –disable-eprt 禁止使用EPRT或LPRT
  • –disable-epsv 禁止使用EPSV
  • –egd-file 为随机数据(SSL)设置EGD socket路径
  • –tcp-nodelay 使用TCP_NODELAY选项
  • -E/–cert  客户端证书文件和密码 (SSL)
  • –cert-type 证书文件类型 (DER/PEM/ENG) (SSL)
  • –key 私钥文件名 (SSL)
  • –key-type 私钥文件类型 (DER/PEM/ENG) (SSL)
  • –pass 私钥密码 (SSL)
  • –engine 加密引擎使用 (SSL). “–engine list” for list
  • –cacert CA证书 (SSL)
  • –capath CA目 (made using c_rehash) to verify peer against (SSL)
  • –ciphers SSL密码
  • –compressed 要求返回是压缩的形势 (using deflate or gzip)
  • –connect-timeout 设置最大请求时间
  • –create-dirs 建立本地目录的目录层次结构
  • –crlf 上传是把LF转变成CRLF
  • –ftp-create-dirs 如果远程目录不存在,创建远程目录
  • –ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
  • –ftp-pasv 使用 PASV/EPSV 代替端口
  • –ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
  • –ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
  • –ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
  • -F/–form  模拟http表单提交数据
  • -form-string  模拟http表单提交数据
  • -g/–globoff 禁用网址序列和范围使用{}和[]
  • -G/–get 以get的方式来发送数据
  • -h/–help 帮助
  • -H/–header 自定义头信息传递给服务器
  • –ignore-content-length 忽略的HTTP头信息的长度
  • -i/–include 输出时包括protocol头信息
  • -I/–head 只显示文档信息
  • -j/–junk-session-cookies 读取文件时忽略session cookie
  • –interface 使用指定网络接口/地址
  • –krb4 使用指定安全级别的krb4
  • -k/–insecure 允许不使用证书到SSL站点
  • -K/–config 指定的配置文件读取
  • -l/–list-only 列出ftp目录下的文件名称
  • –limit-rate 设置传输速度
  • –local-port 强制使用本地端口号
  • -m/–max-time 设置最大传输时间
  • –max-redirs 设置最大读取的目录数
  • –max-filesize 设置最大下载的文件总量
  • -M/–manual 显示全手动
  • -n/–netrc 从netrc文件中读取用户名和密码
  • –netrc-optional 使用 .netrc 或者 URL来覆盖-n
  • –ntlm 使用 HTTP NTLM 身份验证
  • -N/–no-buffer 禁用缓冲输出
  • -p/–proxytunnel 使用HTTP代理
  • –proxy-anyauth 选择任一代理身份验证方法
  • –proxy-basic 在代理上使用基本身份验证
  • –proxy-digest 在代理上使用数字身份验证
  • –proxy-ntlm 在代理上使用ntlm身份验证
  • -P/–ftp-port 使用端口地址,而不是使用PASV
  • -Q/–quote 文件传输前,发送命令到服务器
  • –range-file 读取(SSL)的随机文件
  • -R/–remote-time 在本地生成文件时,保留远程文件时间
  • –retry 传输出现问题时,重试的次数
  • –retry-delay 传输出现问题时,设置重试间隔时间
  • –retry-max-time 传输出现问题时,设置最大重试时间
  • -S/–show-error 显示错误
  • –socks4  用socks4代理给定主机和端口
  • –socks5  用socks5代理给定主机和端口
  • -t/–telnet-option  Telnet选项设置
  • –trace 对指定文件进行debug
  • –trace-ascii Like --跟踪但没有hex输出
  • –trace-time 跟踪/详细输出时,添加时间戳
  • –url Spet URL to work with
  • -U/–proxy-user  设置代理用户名和密码
  • -V/–version 显示版本信息
  • -X/–request 指定什么命令
  • -y/–speed-time 放弃限速所要的时间。默认为30
  • -Y/–speed-limit 停止传输速度的限制,速度时间’秒
  • -z/–time-cond 传送时间设置
  • -0/–http1.0 使用HTTP 1.0
  • -1/–tlsv1 使用TLSv1(SSL)
  • -2/–sslv2 使用SSLv2的(SSL)
  • -3/–sslv3 使用的SSLv3(SSL)
  • –3p-quote like -Q for the source URL for 3rd party transfer
  • –3p-url 使用url,进行第三方传送
  • –3p-user 使用用户名和密码,进行第三方传送
  • -4/–ipv4 使用IP4
  • -6/–ipv6 使用IP6

访问的URL

你可以在命令行上指定任意数量的url。它们将按指定的顺序依次获取。

你可以指定多个url,或url的部分通过在花括号内编写部分集,如:

#http://site.{one,two,three}.com
curl http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/ -I  # 查看信息

或者可以使用[]得到字母数字序列的序列,如:

#ftp://ftp.numericals.com/file[1-100].txt
#ftp://ftp.numericals.com/file[001-100].txt   # 前导用零
#ftp://ftp.letters.com/file[a-z].txt 
curl http://www.zhangblog.com/2019/06/16/hexo[04-06]/ -I     # 查看信息

不支持嵌套序列,但可以使用几个相邻的序列:

http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html

你可以指定一个步长计数器的范围,以获得每第n个数字或字母:

http://www.numericals.com/file[1-100:10].txt 
http://www.letters.com/file[a-z:2].txt

如果指定URL而没有protocol:// prefix,默认为HTTP。


示例

#执行后,www.linux.com 的html就会显示在屏幕上
curl http://www.linux.com
#指定proxy服务器以及其端口
curl -x 192.168.100.100:1080 http://www.linux.com
#模仿浏览器
curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
#伪造referer(盗链)
curl -e "www.linux.com" http://mail.linux.com
#显示抓取错误
curl -f http://www.linux.com/error
#指定要使用curl的最大传输速率。
#单位:默认字节,除非添加后缀。附加 “k” 或 “K” 表示千字节, “m” 或 “M” 表示兆字节,而 “g” 或 “G” 表示千兆字节。例如:200K, 3m和1G。
curl --limit-rate 500 http://www.baidu.com/
curl --limit-rate 2k http://www.baidu.com/
#指定本地的一个端口或端口范围去连接。
#请注意,端口号本质上是一种稀缺资源,有时会很忙,因此将此范围设置为太窄可能会导致不必要的连接失败。
curl --local-port 9000 http://www.baidu.com/
curl --local-port 9000-9999 http://www.baidu.com/

保存访问的网页

#使用linux的重定向功能保存
curl http://www.linux.com >> linux.html
#使用curl的内置option:-o(小写)保存网页
curl -o linux.html http://www.linux.com
#使用curl的内置option:-O(大写)保存网页中的文件,要注意这里后面的url要具体到某个文件,不然抓不下来.
curl -O http://www.linux.com/hello.sh
#测试网页返回值
curl -o /dev/null -s -w %{http_code} www.linux.com\

cookie

#保存http的response里面的cookie信息。内置option:-c(小写),执行后cookie信息就被存到了cookiec.txt里面了
curl -c cookiec.txt  http://www.linux.com
#保存http的response里面的header信息。内置option: -D
curl -D cookied.txt http://www.linux.com
#使用保存的cookie信息。内置option: -b
curl -b cookiec.txt http://www.linux.com

下载上传文件

#使用内置option:-o(小写)
curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
#使用内置option:-O(大写),这样就会以服务器上的名称保存文件到本地
curl -O http://www.linux.com/dodo1.JPG
#循环下载,有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样,这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来
curl -O http://www.linux.com/dodo[1-5].JPG
#下载重命名
curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG
curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG
#分块下载
curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG
curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
cat dodo1_part* > dodo1.JPG
#指定要下载的文件的最大大小(以字节为单位)。
 curl --max-filesize 1000 -I http://www.zhangblog.com/uploads/hexo/00.jpg 
#通过ftp下载文件,curl提供两种从ftp中下载的语法
curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG
curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG
#显示下载进度条
curl -# -O http://www.linux.com/dodo1.JPG
#不会显示下载进度信息
curl -s -O http://www.linux.com/dodo1.JPG
#断点续传
curl -C -O http://www.linux.com/dodo1.JPG
#上传文件
curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/   

提交表单

#-F, --form <name=content>
#模拟用户按下submit按钮后填充的表单。
#该情况让curl 可使用Content-Type multipart/form-data POST数据。也可以上传二进制文件等。
# @文件名:使一个文件作为文件上传附加在post中。
# <文件名:从文件中获取该文本字段的内容。
#将密码文件发送到服务器,其中“password”是表单字段的名称,/etc/passwd将作为输入:
curl -F password=@/etc/passwd www.mypasswords.com
#可以使用 ‘type=’ 告诉curl使用什么 Content-Type ,方法类似于:
curl -F "web=@index.html;type=text/html" url.com
curl -F "name=daniel;type=text/foo" url.com
#可以通过设置 filename= 更改本地上传的文件名,如下:
curl -F "file=@localfile;filename=nameinpost" url.com
#如果文件名/路径包括 ‘,’ 或 ‘;’ ,必须用双引号括起来:最外层可用单引号或双引号,这个选项可以多次使用。
curl -F "file=@\"localfile\";filename=\"nameinpost\"" url.com
curl -F 'file=@"localfile";filename="nameinpost"' url.com
#--form-string <name=string>
#(HTTP)类似于 --form,只是命名参数的value字符串按字面意思使用。
#在值中以 ‘@’ 和 ‘<’ 开头的字符,以及 ‘;type=’ 字符串没有特殊的含义。
#如果字符串值有可能意外触发 --form 的 “@” 或 “<” 特性,请优先使用此选项。
#GET提交 直接写url里面
curl "http://test.com/a.php?param1=aaa¶m2=bbb"
#POST提交    通过 --data/-d 方式指定使用POST方式传递数据
#(注意:如果键值对只有一个的话,可以不写双引号,但是如果有多个键值对,必须加上双引号,键值对之间用&连接)
curl -d "key=value&key=value" "url"
curl --data "key=value&key=value" "url"


目录
相关文章
|
17天前
|
安全 Linux 虚拟化
网络名称空间在Linux虚拟化技术中的位置
网络名称空间(Network Namespaces)是Linux内核特性之一,提供了隔离网络环境的能力,使得每个网络名称空间都拥有独立的网络设备、IP地址、路由表、端口号范围以及iptables规则等。这一特性在Linux虚拟化技术中占据了核心位置🌟,它不仅为构建轻量级虚拟化解决方案(如容器📦)提供了基础支持,也在传统的虚拟机技术中发挥作用,实现资源隔离和网络虚拟化。
网络名称空间在Linux虚拟化技术中的位置
|
17天前
|
网络协议 安全 Linux
Linux网络名称空间之独立网络资源管理
Linux网络名称空间是一种强大的虚拟化技术🛠️,它允许用户创建隔离的网络环境🌐,每个环境拥有独立的网络资源和配置。这项技术对于云计算☁️、容器化应用📦和网络安全🔒等领域至关重要。本文将详细介绍在Linux网络名称空间中可以拥有的独立网络资源,并指出应用开发人员在使用时应注意的重点。
|
17天前
|
安全 网络协议 Linux
Linux网络名称空间概述
Linux网络名称空间是操作系统级别的一种虚拟化技术🔄,它允许创建隔离的网络环境🌐,使得每个环境拥有自己独立的网络资源,如IP地址📍、路由表🗺️、防火墙规则🔥等。这种技术是Linux内核功能的一部分,为不同的用户空间进程提供了一种创建和使用独立网络协议栈的方式。本文旨在全方面、多维度解释Linux网络名称空间的概念、必要性和作用。
Linux网络名称空间概述
|
25天前
|
Linux
Linux中centos桌面消失网络图标
Linux中centos桌面消失网络图标
13 0
|
1月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 向指定用户或终端发送消息 write命令 使用指南
【Shell 命令集合 网络通讯 】Linux 向指定用户或终端发送消息 write命令 使用指南
34 0
|
1月前
|
安全 Unix Shell
【Shell 命令集合 网络通讯 】Linux 向所有当前登录的用户发送消息或通知 wall命令 使用指南
【Shell 命令集合 网络通讯 】Linux 向所有当前登录的用户发送消息或通知 wall命令 使用指南
30 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
26 0
|
1月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
29 0
|
16天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
6天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。