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"


目录
相关文章
|
4天前
|
监控 安全 Linux
【专栏】Linux 中有哪些常用的网络命令,分别适用于什么场景?
【4月更文挑战第28天】本文介绍了Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip,以及它们在测试网络连通性、追踪路由、查看网络状态、安全扫描和接口配置等场景的应用。通过学习和运用这些命令,系统管理员和网络爱好者能更有效地诊断和管理网络问题,确保网络稳定运行。
|
5天前
|
网络协议 算法 Linux
【Linux】深入探索:Linux网络调试、追踪与优化
【Linux】深入探索:Linux网络调试、追踪与优化
|
1天前
|
Ubuntu 网络协议 Linux
|
1天前
|
Linux
Linux课程四课---Linux开发环境的使用(自动化构建工具-make/Makefile的相关)
Linux课程四课---Linux开发环境的使用(自动化构建工具-make/Makefile的相关)
|
2天前
|
JSON 网络协议 Linux
Linux ip命令:网络的瑞士军刀
【4月更文挑战第25天】
8 1
|
3天前
|
缓存 网络协议 Linux
Linux 网络命令大全,详细归纳!
【4月更文挑战第24天】
24 3
Linux 网络命令大全,详细归纳!
|
4天前
|
Linux 网络安全 数据处理
【专栏】Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
【4月更文挑战第28天】Linux下的xxd命令是一个强大的二进制数据处理工具,用于十六进制转储和数据分析。它可以显示文件的十六进制和ASCII表示,方便查看内容、分析数据结构和比较文件。xxd支持指定输出格式、写入文件、数据提取和转换等功能。在网络安全分析、程序调试和数据恢复等领域有广泛应用。通过掌握xxd,用户能更深入理解和处理二进制数据。
|
4天前
|
网络协议 JavaScript Linux
Linux常用网络指令(下)
Linux常用网络指令(下)
11 0
|
4天前
|
Linux
Linux常用网络指令(上)
Linux常用网络指令(上)
6 0