娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

curl常用命令详解

1、常用参数
参数组 参数 描述
url url 需要抓取的一到多个URLs;
多个下面通配符的方式:
1、http://{www,ftp,mail}.aiezu.com;
2、http://aiezu.com/images/[001-999].jpg;
3、http://aiezu.com/images/[1-999].html;
4、ftp://aiezu.com/file[a-z].txt
请求头 -H “name: value”
–header “name: value”
(HTTP)添加一个http header(http请求头);
-H “name:”
–header “name:”
(HTTP)移除一个http header(http请求头);
-A “string”
–user-agent “string”
(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。

也可以使用“-H”, “–header option”设置此选项;

-e <URL>
–referer <URL>
(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面;
-e “aiezu.com”相当于“-H “Referer: www.qq.com””;
响应头 -I
–head
(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。
用于HTTP服务时,获取页面的http头;
(如:curl -I http://aiezu.com)
用于FTP/FILE时,将会获取文件大小、最后修改时间;
(如:curl -I file://test.txt)
-i
–include
(HTTP)输出HTTP头和返回内容;
-D <file>
–dump-header <file>
(HTTP)转储http响应头到指定文件;
cookie -b name=data
–cookie name=data
(HTTP)发送cookie数据到HTTP服务器,数据格式为:”NAME1=VALUE1; NAME2=VALUE2″;如果行中没有“=”,将把参数值当作cookie文件名;这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;
-c filename
–cookie-jar file name
(HTTP)完成操作后将服务器返回的cookies保存到指定的文件;
指定参数值为“-”将定向到标准输出“如控制台”;
-j
–junk-session-cookies
(HTTP)告诉curl放弃所有的”session cookies”;
相当于重启浏览器;
代理 -x host:port
-x [protocol://[user:pwd@]host[:port]
–proxy [protocol://[user:pwd@]host[:port]
使用HTTP代理访问;如果未指定端口,默认使用8080端口;protocol默认为http_proxy,其他可能的值包括:http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;如:
–proxy 8.8.8.8:8080;
-x “http_proxy://aiezu:[email protected]:80”
-p
–proxytunnel
将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;
–socks4 <host[:port]>
–socks4a <host[:port]>
–socks5 <host[:port]>
使用SOCKS4代理;
使用SOCKS4A代理;
使用SOCKS5代理;
此参数会覆盖“-x”参数;
–proxy-anyauth
–proxy-basic
–proxy-diges
–proxy-negotiate
–proxy-ntlm
http代理认证方式,参考:
–anyauth
–basic
–diges
–negotiate
–ntlm
-U <user:password>
–proxy-user <user:password>
设置代理的用户名和密码;
数据传输 -G
–get
如果使用了此参数,“-d/”、“–data”、“–data-binary”参数设置的数

据,讲附加在url上,以GET的方式请求;

-d @file
-d “string”
–data “string”
–data-ascii “string”
–data-binary “string”
–data-urlencode “string”
(HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method=”POST”,enctype=”application/x-www-form-urlencoded”)
-d,–data:HTTP方式POST数据;
–data-ascii:HTTP方式POST ascii数据;
–data-binary:HTTP方式POST二进制数据;
–data-urlencode:HTTP方式POST数据(进行urlencode);
如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;
-F name=@file
-F name=<file
-F name=content
–form name=content
(HTTP)使用HTTP POST方式发送类似“表单字段”的多类型数据,相当于同时设置浏览器表单属性(method=”POST”,enctype=”multipart/form-data”),可以使用此参数上传二进制文件。
如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如:
curl -F “[email protected]” http://aiezu.com;
curl -F “[email protected];type=text/html” http://aiezu.com
curl -F “page=@/tmp/a;filename=a.txt” http://aiezu.com
如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl -F “text=<text.txt” http://aiezu.com;
–form-string <key=value> (HTTP)类似于“–form”,但是“@”、“<”无特殊含义;
-T file
–upload-file file
通过“put”的方式将文件传输到远程网址;选项参数只使用字符”-“,将通过stdin读入文件内容;如:
cat test.txt|curl “http://aiezu.com/a.php” -T –
curl “http://aiezu.com/a.php” -T – <test.txt
此参数也可以使用通配符:
curl -T “{file1,file2}” http://aiezu.com
curl -T “img[1-1000].png” http://aiezu.com
断点续传 -C <offset>
–continue-at <offset>
断点续转,从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;
-r <range>
–range <range>
(HTTP/FTP/SFTP/FILE) 只传输内容的指定部分:
0-499:最前面500字节;
-500:最后面500字节;
9500-:最前面9500字节;
0-0,-1:最前面和最后面的1字节;
100-199,500-599:两个100字节;
认证 –basic (HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式;
–ntlm (HTTP)使用NTLM身份验证方式,用于HTTP协议;
一般用于IIS使用NTLM的网站;
–digest (HTTP)使用HTTP Digest authentication加密,用于HTTP协议;配合“-u/–user”选项,防止密码使用明文方式发送;
–negotiate (HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议;它主要目的是为它的主要目的是为kerberos5认证提供支持支持;
–anyauth (HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;
-u user:password
–user user:password
使用用户名、密码认证,此参数会覆盖“-n”、“–netrc”和“–netrc-optional”选项;如果你只提供用户名,curl将要求你输入密码;如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证;
此参数相当于设置http头“Authorization:”;
证书 -E <证书[:密码]>
–cert <证书[:密码]>
(SSL)指定“PEM”格式的证书文件和证书密码;
–cert-type <type> (SSL)告诉curl所提供证书的类型:PEM、DER、ENG等;默认为“PEM”;
–cacert <CA证书> (SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;
–capath <CA证书路径> (SSL)告诉curl所以指定目录下的CA证书用来验证;这些证书必须是“PEM”格式;
–crlfile <file> (HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;
-k
–insecure
(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。
SSL其他 –ciphers <list of ciphers> (SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;
–engine <name> 设置一个OpenSSL加密引擎用于加密操作;使用“curl –engine list”查看支持的加密引擎列表;
–random-file (SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;
–egd-file <file> (SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名;
-1/–tlsv1
–tlsv1.0
–tlsv1.1
–tlsv1.2
-2/–sslv2
-3/–sslv3
(SSL)使用TLS版本2与远程服务器通讯;
(SSL)使用TLS 1.0版本与远程服务器通讯;
(SSL)使用TLS 1.1版本与远程服务器通讯;
(SSL)使用TLS 1.2版本与远程服务器通讯;
(SSL)使用SSL版本2与远程服务器通讯;
(SSL)使用SSL版本3与远程服务器通讯;
私钥公钥 –key <key> (SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“./id_rsa’”、 “./id_dsa”;
–key-type <type> (SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;
–pass <phrase> (SSL/SSH)指定私钥文件的密码;
–pubkey <key> (SSH)使用指定文件提供的您公钥;
FTP -P
–ftp-port <接口>
(FTP)FTP主动模式时,设置一个地址等待服务器的连接,如:
网卡:eth1
IP:8.8.8.8
主机名:aiezu.com
可以加端口号:eth1:20000-21000;
–crlf (FTP)上传时将换行符(LF)转换为回车换行(CRLF);
–ftp-account [data] (FTP)ftp帐号信息;
–ftp-method [method] (FTP)可选值:multicwd/nocwd/singlecwd;
–ftp-pasv (FTP)使用使用PASV(被动)/EPSV模式;
–ftp-skip-pasv-ip (FTP)使用PASV的时,跳过指定IP;
–ftp-create-dirs (FTP)上传时自动创建远程目录;
-l
–list-only
(FTP)列出ftp文件列表;
-B
–use-ascii
(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。
–disable-epsv (FTP)告诉curl在PASV(被动模式)时不要使用EPSV;
–disable-eprt (FTP)告诉curl在主动模式时禁用EPRT和LPRT;
限速 –limit-rate <speed> 限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“–limit-rate 1m”为限制最大使用带宽为“1m字节/秒”;
-y
–speed-time <time>
If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.
This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the –connect-timeout option.
-Y
–speed-limit <speed>
If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set.
其他选项 -0/–http1.0 (HTTP) 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1;
–interface <name> 使用指定的网卡接口访问;
curl –interface eth0 http://aiezu.com
curl –interface 10.0.0.101 http://aiezu.com
-X <command>
–request <command>
(HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、

POST、DELETE等,默认GET;

–keepalive-time <seconds> 设置keepalive时间
–no-keepalive 关闭keepalive功能;
–no-buffer 禁用对输出流缓冲;
–buffer 启用输出流缓冲;
-L
–location
(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;(在http响应码为3XX时使用,如301跳转、302跳转)
–location-trusted (HTTP/HTTPS)同“–location”,但跳转后会发送跳转前的用户名和密码;
–compressed (HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;
–connect-timeout <seconds> 指定最大连接超时,单位“秒”;
-m seconds
–max-time seconds
限制整个curl操作的最长时间,单位为秒;
-s
–silent
安静模式。不要显示进度表或错误消息;
-#
–progress-bar
显示进度条;
错误选项 -f
–fail
(HTTP)连接失败时(400以上错误)不返回默认错误页面,而是返回一个curl错误码“22”;
–retry <num>
–retry-delay <seconds>
–retry-max-time <seconds>
失败重试次数;
重试间隔时间;
最大重试时间;
-S
–show-error
安静模式下显示错误信息;
–stderr <file> 错误信息保存文件;
输出 -o file
–output file
将返回内容输出到文件。如果是用过通配符获取多个url,可以使用“#”后跟“数字序号”,curl会自动将它替换对应的关键词,如:
curl “http://aiezu.com/{a,b}.txt” -o “#1.txt”;
将保存为:“a.txt”,“b.txt”;

curl “http://aiezu.com/{a,b}_[1-3].txt” -o “#1#2.txt”;
将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt

如果要根据规则创建保存目录,参考:“–create-dirs”
指定“-”将定向到标准输出“如控制台”;

-O
–remote-name
将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);
–create-dirs 与“-o”参数配合使用,创建必要的本地目录层次结构
-w
–write-out format
操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-”格式参数中可以用%{variable_name} 方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}…,更多变量参考“man curl”获取;
格式参数可以使用“\n”、“\r”、“\t”等转义字符;
调试 –trace <file> 转储所有传入和传出的数据到文件,包括描述信息;使用“-”作为文件名将输出发送到标准输出。
–trace-ascii file 转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读;
使用“-”作为文件名将输出发送到标准输出。
这个选项会覆盖之前使用的-v、 –verbose、 –trace-ascii选项;
–trace-time 转储文件中添加时间信息;
-K
–config <config file>
从配置文件中读取参数,参考:http://curl.haxx.se/docs/
-v
–verbose
显示更详细的信息,调试时使用;
帮助 -M
–manual
显示完整的帮助手册;
-h
–help
linux curl用法帮助;
2、常用参数汇总
-A/--user-agent <string> 设定使用者的代理发送给服务器
-b/--cookie <name=string/file> 设置cookie文件的读取位置
-c/--cookie-jar <file> 操作结束后把cookie写入到指定文件中
-C/--continue-at <offset> 断点续传
-d/--data "data" 携带HTTP POST请求的data 
-D/--dump-header <file> 把header信息写入到指定文件中
-e/--referer 带入来源网址
-F/ 上传二进制文件,也可以当做-d来用
-H/--header 设定请求头
-i/--include 在输出中显示header
-K:指定配置文件
-L:会让HTTP请求跟随服务器的重定向,curl默认不跟随重定向
-m:限制curl完成时间(overall time limit)
-o/--output 把输出内容写入到指定文件中(重命名),等同于wget命令
-O/--remote-name 把输出内容写入到指定文件中,并保留原文件名
-r/--range <range> 返回HTTP/1.1或FTP服务器响应的指定范围字符
-s/--silent 静默模式,不输出任何东西
-T/--upload-file <file> 上传文件
-u/--user <user[:password]> 设定服务器的用户名和密码
-v/--verbose 输出更多信息,便于debug
-w/--write-out [format] 请求完成后指定输出内容
-x/--proxy <host[:port]> 使用HTTP代理
-X/--request [GET|POST|PUT|DELETE|PATCH]  使用指定的 http method 来发出 http request
-Y:设置下载限速
--dump-header:保存Header限速
--limit-rate:用来限制HTTP请求和回应的带宽,模拟慢网速的环境
--local-port:强制使用指定的本地端口号
--resolve HOST:PORT:ADDRESS  强制将 HOST:PORT 解析到指定的 IP ADDRESS
--trace <file>:输出请求的详细信息
-#/--progress-bar 進度條顯示當前的傳送狀態

常用方式

-A/–user-agent:指定 User-Agent

有时候server会阻止curl的下载请求,这时可以透过修改User-Agent来模拟正常使用者发出的请求,比如模拟谷歌浏览器:

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" https://www.baidu.com
-b/-c:读取/存储Cookie
# 发出请求时将 cookie_file 中的数据带入请求中
curl -b cookie_file https://www.baidu.com
# 也可以用以下形式传递cookie
curl -b "oraclelicense=accept-securebackup-cookie"  https://www.baidu.com
# 将请求时产生的 cookie 放到 cookie_file 中
curl -c cookie_file https://www.baidu.com
-C:断点续传

C表示Continue-at,文件下载被中断时不需要重新下载整个文件,可以通过-C命令继续下载:

-C offset:从指定的offset位置开始续传,我自己用这个参数测试时没续传成功过,不太确定如何使用; -C -:让curl自己分析该从什么位置开始续传。 使用以下命令下载文件:

curl -o test.jpg https://www.baidu.com/test.jpg

打断之后再继续下载

curl -C - -o test.jpg https://www.baidu.com/test.jpg
-d:携带POST请求的data
curl -X POST -d "name=andrew&age=22" -F "nm=da" https://www.baidu.com
# 将data编码
curl -X POST --data-urlencode "name=andrew age=22" https://www.baidu.com

注意:-d是发送post参数,-F是发送form-data数据,两者不能同时使用,否则会报错:

curl -X POST -d "name=andrew" -F "age=22" https://www.baidu.com
Warning: You can only select one HTTP request method! You asked for both POST
Warning: (-d, --data) and multipart formpost (-F, --form).
-D:把header信息写入到指定文件中
# 把请求返回的header信息写入到header_file文件中
curl -D header_file https://www.baidu.com
-e/–referer:带入来源网址referer
curl -e "www.google.com" https://www.baidu.com

当某些连接必须通过301或302跳转过去时,用auto参数来让访问更加拟真:

curl -L -v -e ";auto" https://www.baidu.com
-F/–form:表单提交
curl -X POST -F 'uid="123456789"' https://www.baidu.com
-H/–header:添加请求头
curl --header 'Content-Type: application/x-www-form-urlencoded' https://www.baidu.com
-i/-I:显示response的header
# -i 返回header和网页内容
curl -i http://www.baidu.com
# -I 只返回header
curl -I http://www.baidu.com
-K/–config:指定配置文件
# -K后接配置文件名,如果使用 - 符号,则通过stdin输入配置
echo "user = user:passwd" | curl -K - https://www.baidu.com
-L:跟随跳转

通常情况下curl命令不会跟随301或302跳转,如果期望跟随跳转可以加上-L参数。

比如我们在访问谷歌或百度时,URL没有加上www前缀,会自动触发301或302跳转,我们可以用curl http://google.com/和curl https://baidu.com/(注意:这里没有加www前缀)命令来测试一下:

-m:限制完成时间
# 让curl必须在30分钟(1800s)内完成
curl -m 1800 -Y 3000 -y 60 www.far-away-site.com
-o/-O:下载文件

小写的-o代表下载文件并重命名:

curl -o test.jpg https://www.baidu.com/test.jpg

大写的-O代表下载文件并使用原文件名:

curl -O https://www.baidu.com/test.jpg
-r:返回指定范围内的字符
# 返回响应的前100个字符
curl -r 0-99 https://www.baidu.com
# 返回响应的最后500个字符
curl -r -500 https://www.baidu.com
-s:减少输出的信息
curl -s http://www.baidu.com
-T:上传文件

发送PUT请求。

# 上传所有的stdin标准输入到server,按ctrl+d结束输入,前提是该server能接收PUT类型的请求
curl -T - ftp://ftp.upload.com/myfile
# 也可以通过管道传递stdin
echo "user = user:passwd" | curl -T - ftp://ftp.upload.com/myfile
# 上传指定文件到server,并指定上传后的文件名为myfile
curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile
# 上传指定文件到server,并沿用本地文件名
curl -T uploadfile -u user:passwd ftp://ftp.upload.com/
# -a:使用追加的方式上传文件
curl -T uploadfile -a ftp://ftp.upload.com/myfile
-u:设定用户名和密码
# 比如在访问ftp服务器时需要输入用户名和密码
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
-v:输出完整信息

显示一次http通信的整个过程,通常用于debug

curl -v http://www.baidu.com
-V:查看curl版本
cur -V
-w:请求完成后显示自定义信息
# 显示响应状态码
curl -w "%{http_code}\n" -i -s -o /dev/null https://www.baidu.com
# 显示响应 content_type
curl -w "%{content_type}\n" -i -s -o /dev/null https://www.baidu.com
-x:使用代理服务器(proxy)
curl -x 192.168.5.1:8888 http://www.baidu.com
# 如果代理服务器需要账号密码,可以使用 -U 或 --proxy-user 来指定
curl -U username:password -x 192.168.5.1:8888 http://www.baidu.com
# 不使用代理访问
curl --noproxy localhost,get.this http://www.baidu.com
-X/–request:指定请求类型
curl --request GET https://www.baidu.com
curl -X POST https://www.baidu.com
-Y/-y:限制下载速度
# 限制curl的下载速度在每秒3000字节以内,保持60秒
curl -Y 3000 -y 60 www.far-away-site.com
–limit-rate:限制下载速度

如果想测试下载是否正常又不想占用太多带宽,可以用limit-rate参数做下载限速:

curl --limit-rate 100k -o test.jpg https://www.baidu.com/test.jpg
–local-port:强制使用本地端口号
curl --local-port 8765 https://www.baidu.com
–resolve:强制解析Host为指定IP
curl --resolve www.google.com:443:142.251.35.164 -v https://www.google.com
–trace :输出请求的详细信息

如果用-v还是不能定位问题,可以进一步用--traceascii编码格式将更详细的内容输出到指定文件中,据此来debug

# 将trace信息保存到trace.txt文件中
curl --trace trace.txt https://www.baidu.com
-# :展示下载进度
curl -# -o test.jpg https://www.baidu.com/test.jpg

 

赞(0)
未经允许不得转载:娃哈哈好喝 » curl常用命令详解
分享到: 更多 (0)