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"


目录
相关文章
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
214 8
|
3月前
|
监控 Unix Linux
Linux系统工具
Linux系统工具
61 6
|
14天前
|
安全 网络协议 Linux
结合 `nc` 工具利用笑脸漏洞(Smile Bug)攻击 Metasploitable2 Linux
本文介绍如何使用 `nc`(Netcat)工具结合笑脸漏洞(Smiley Bug)攻击 Metasploitable2 Linux 靶机。首先概述了 `nc` 的基本功能和高级用法,包括建立连接、监听端口、文件传输等操作。接着详细描述了笑脸漏洞的原理及其在网络攻防中的应用,展示了通过 `nc` 发送恶意输入检测漏洞的方法。最后结合 Python 脚本实现更复杂的攻击场景,并强调了合法性和环境隔离的重要性。
41 13
|
18天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
67 15
|
11天前
|
缓存 负载均衡 安全
Swift中的网络代理设置与数据传输
Swift中的网络代理设置与数据传输
|
21天前
|
运维 监控 Linux
推荐几个不错的 Linux 服务器管理工具
推荐几个不错的 Linux 服务器管理工具
110 6
|
23天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
158 7
|
2月前
|
域名解析 网络协议 安全
|
2月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
3月前
|
运维 监控 网络协议